【Python--torch.nn.functional】F.normalize用法 + 代码说明

news2024/10/1 21:26:48

【Python–torch.nn.functional】F.normalize介绍 + 代码说明

文章目录

  • 【Python--torch.nn.functional】F.normalize介绍 + 代码说明
    • 1. 介绍
    • 2. 代码说明
      • 2.1 一维Tensor
      • 2.2 二维Tensor
      • 2.3 三维Tensor
    • 3. 总结

1. 介绍

import torch.nn.functional as F
F.normalize(input: Tensor, p: float = 2.0, dim: int = 1, eps: float = 1e-12) -> Tensor
  • input: 是一个任意维度的Tensor类型的数据
  • p:默认为2,表示2范数;同理,p=1表示1范数
  • dim:
    • 默认为1,在输入数据input的shape是二维的且p=2情况下,表示对行进行操作,即所有元素除以第一行元素的根号下平方和;
    • dim=0 时,在输入数据input的shape是二维的且p=2情况下,表示对列进行操作,即所有元素除以第一列元素的根号下平方和;
    • dim为其他值时,之后通过代码分析。
  • eps:默认为1e-12,防止除0。

在这里插入图片描述
因此,Normalize对应的公式为:
在这里插入图片描述

2. 代码说明

2.1 一维Tensor

c = torch.Tensor([1, 2, 3])
print(F.normalize(c, dim=0))
'''
tensor([0.2673, 0.5345, 0.8018])
torch.Size([3])
解释:
默认dim=1,是按行操作,但是一维的Tensor是列向量,所以必须指定dim=0
默认p=2,所以这个一维的Tensor(列向量)每个元素都除以sqrt(1**2 + 2**2 + 3**2)
'''

2.2 二维Tensor

import torch.nn.functional as F
import torch

a = torch.arange(20, dtype=torch.float).reshape(4,5)
b = F.normalize(a, dim=0)
c = F.normalize(a, dim=1)
print(a)
print(b)
print(c)

输出:

# 输入的数组
tensor([[ 0.,  1.,  2.,  3.,  4.],
        [ 5.,  6.,  7.,  8.,  9.],
        [10., 11., 12., 13., 14.],
        [15., 16., 17., 18., 19.]])
# dim=0时,即沿第一维度(列)做归一化
tensor([[0.0000, 0.0491, 0.0907, 0.1261, 0.1564],
        [0.2673, 0.2949, 0.3175, 0.3363, 0.3519],
        [0.5345, 0.5406, 0.5443, 0.5464, 0.5474],
        [0.8018, 0.7864, 0.7711, 0.7566, 0.7430]])
# dim=1时,即沿第二维度(行)做归一化
# 维度记忆技巧:最后一个维度始终是行,从后向前推:行、列、通道
tensor([[0.0000, 0.1826, 0.3651, 0.5477, 0.7303],
        [0.3131, 0.3757, 0.4384, 0.5010, 0.5636],
        [0.3701, 0.4071, 0.4441, 0.4812, 0.5182],
        [0.3932, 0.4195, 0.4457, 0.4719, 0.4981]])

2.3 三维Tensor

a = torch.Tensor([[[1, 2, 3], 
				   [4, 5, 6]], 
				  [[10, 20, 30], 
				   [40, 50, 60]]]) # (2, 2, 3)

print(F.normalize(a))  # dim = 1, 举个例子,1、4为1组,进行norm。

print(F.normalize(a, dim=0))  # dim = 0, 1、10为1组,进行norm。

print(F.normalize(a, dim=2)) # dim = 2, 1、2、3为1组,进行norm。

'''
tensor([[[0.2425, 0.3714, 0.4472],
         [0.9701, 0.9285, 0.8944]],

        [[0.2425, 0.3714, 0.4472],
         [0.9701, 0.9285, 0.8944]]])

tensor([[[0.0995, 0.0995, 0.0995],
         [0.0995, 0.0995, 0.0995]],

        [[0.9950, 0.9950, 0.9950],
         [0.9950, 0.9950, 0.9950]]])

tensor([[[0.2673, 0.5345, 0.8018],
         [0.4558, 0.5698, 0.6838]],

        [[0.2673, 0.5345, 0.8018],
         [0.4558, 0.5698, 0.6838]]])
'''

3. 总结

  • 按照指定Tensor最大的dim的去norm时,就是对物理存储地址挨着最紧密的那一维进行norm。
  • 当dim为2,此时dim最大,就是对1、2、3(物理存储地址最紧密)为一组进行norm。
  • 当dim为1,则降一维度,对物理存储地址次紧密的元素为一组进行norm。也就是1、4为一组。
  • 当dim为0,就是按照最远的一组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(考研湖科大教书匠计算机网络)第四章网络层-第五节:静态路由配置及其可能产生的路由环路问题

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:静态路由配置(1)概述(2)举例说明A:静态路由配置B:默认路由C:特定…

【Python从入门到进阶】7、运算符

接上篇《6、变量规范及类型转换》 上一篇我们学习了Python变量的命名规范以及类型转换。本篇我们来学习Python的运算符部分,包括算数运算符、赋值运算符、比较运算符、逻辑运算符等。 一、运算符含义 运算符用于执行程序代码运算,会针对一个以上操作数…

网友眼中越老越吃香的行业,果然是风向变了!

越老越吃香的行业,一直都是被热议的话题。对于年轻人来说,找到一个适合自己的并且具有前景的工作,不是一件容易的事情。 最近,看到有人在平台上问相关的问题,本着认真看一看的态度点进去,却差点被热评第一…

MyBatis详解1——相关配置

一、什么是MyBatis 1.定义:是一个优秀的持久层框架(ORM框架),它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式:xml或者注解实现操作(xm…

Hadoop集群配置

一、系统文件配置集群部署规划NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode放在同一台机器上。这里装了四台机器,ant151,ant152,ant153,ant154。ant151ant152ant153ant154NameNode…

【JUC并发编程】18 CopyOnWriteArrayList源码也就够看2分钟

文章目录1、CopyOnWriteArrayList概述2、原理 / 源码1)构造函数2、add()3)get()4)remove()5)iterator()1、CopyOnWriteArrayList概述 CopyOnWriteArrayList相当于线程安全的ArrayList,底层是一个可变数组。 特点如下…

如何在外网访问内网的 Nginx 服务?

计算机业内人士对Nginx 并不陌生,它是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,除了nginx外,类似的apache、tomcat、IIS这几种都是主流的中间件。 Nginx 是在 BSD-like 协议下发行的&…

PythonWeb Django PostgreSQL创建Web项目(一)

环境搭建与初始化 一、 python3下载安装测试 1. 下载地址 官网地址:https://www.python.org/ 国内速度比较慢 国内镜像网站地址:https://registry.npmmirror.com/binary.html?pathpython/ 推荐地址速度快 目前官网最新版本3.11.2如下官网截图 要用嘛…

物联网通信复习简记——助力通关期末考试

物联网通信复习简记——助力通关期末考试 文章目录物联网通信复习简记——助力通关期末考试1. 概述1.1 物联网通信体系架构的基本概念1.2 网络分层模型1.3 常见IoT通信技术2. 物理层2.1 编码/基带信号波形/数字基带调制2.2 信道编码-1- 奇偶校验码-2- 汉明码-3- 循环码差错检验…

人员定位需求多,场景目标各不同

GPS技术为现代人带来了许多便利,也提供了诸多基于位置的新型服务。随着科技的发展,人员位置信息在如今的生产生活中也越发重要起来。因此,不同行业领域开始关注人员定位,尤其关注室内人员定位。室内人员定位需求从目的性出发&…

Venom靶机

环境准备 靶机链接:百度网盘 请输入提取码 提取码:fv06 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2022.03 信息收集 1.探测目标靶机开放端口和服务情况 nmap -p- -sV -A 10.10.10.133 2.查看网页最下面&#xf…

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的

GaiaX跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的Native动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》,带大家看看过去三年GaiaX的发展过程。 前言 GaiaX【https://github.com/alibaba/GaiaX】是由优酷应…

详解ArrayList

目录 1.数据结构 2.初始化 2.1.默认构造 2.2.带参构造 3.扩容 3.1.判断需要多少容量 3.2.判断是否需要扩容 3.3.扩容 4.遍历 5.拷贝 6.序列化 JDK版本:JDK8 1.数据结构 底层使用Object类型的数组实现,线程不安全,添加元素时如果内存…

【遇见青山】基于Redis的Feed流实现案例

【遇见青山】基于Redis的Feed流实现案例1.关注推送2.具体代码实现1.关注推送 关注推送也叫做Feed流,直译为投喂。为用户持续的提供"沉浸式”的体验,通过无限下拉刷新获取新的信息。 Feed流产品有两种常见模式: 这里我们实现基本的TimeL…

Python 爬虫工程师面试经验分享,金三银四

🙃 作为一个 Python 爬虫工程师,我可以分享一些我在面试中的经验和建议。 首先一点是在面试中要表现自信、友好、乐于合作,同时对公司的业务和文化也要有一定的了解和兴趣,这些也是公司在招聘中看重的因素。 文章目录&#x1f55b…

第06章_MySQL多表查询

第06章_多表查询 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之…

node.js基于Vue的英语在线学习网站 vscode+mysql

该系统的基本功能包括管理员、学生、教师三个角色功能模块。 对于管理员可以使用的功能模块主要有首页、个人中心,学生管理、教师管理、班级管理、课程管理,在线学习管理、作业管理、试卷管理、试题管理、 在线论坛、系统管理、考试管理等功能。 对于学生…

STM32F765ZIT6中文规格STM32F765ZGT6引脚图 微控制器MCU

说明STM32F7 32 位 MCUFPU 基于高性能的 ARMCortex-M7 32 位 RISC 内核,工作频率高达 216MHz。Cortex-M7 内核具有单浮点单元(SFPU)精度,支持所有 ARM 单精度数据处理指令与数据类型。同时执行全套 DSP 指令和存储保护单元(MPU)&a…

各CCF期刊点评网站/学术论坛的信息汇总及个人评价

CCF中文期刊投稿选择之篇章一:各CCF期刊点评网站/学术论坛的信息汇总及个人评价中文科技期刊A类(EI检索)中文期刊投稿点评网站整理1.小木虫学术论坛2. Letpub3. Justscience4. 发表记5. 会伴(Conference Partner)6. ijouranl7. 掌桥科研这是以…

Win11的两个实用技巧系列之如何关闭登录密码?

Win11如何关闭登录密码?Win11关闭登录密码的两种解决方法win11是电脑更新后的全新系统,每次开启需要输入密码。有的用户嫌麻烦想要关闭,下面小编就为大家带来了关闭的方法,一起来看看吧有不少用户在升级或者第一次使用Win11系统的时候&#…