Pytorch中关于F.normalize计算理解
作者:静静喜欢大白 发布时间:2021-10-10 12:33:34
关于F.normalize计算理解
动机
最近多次看到该方法出现,于是准备了解一下,搜了后发现原来是所谓的L2 norm计算
简介
函数定义
torch.nn.functional.normalize(input, p=2.0, dim=1, eps=1e-12, out=None)
功能:将某一个维度除以那个维度对应的范数(默认是2范数)。
使用:
F.normalize(data, p=2/1, dim=0/1/-1) 将某一个维度除以那个维度对应的范数(默认是2范数)
data
:输入的数据(tensor)p
:L2/L1_norm运算dim
:0表示按列操作,则每列都是除以该列下平方和的开方;1表示按行操作,则每行都是除以该行下所有元素平方和的开方
举例
最后dim=0,是1/根号下1平方+1平方,2/根号下2平方+2平方,3/根号下3平方+3平方,所以都是0.7071
Pytorch中normalize应用
torch.nn.functional.normalize(input, p=2, dim=1, eps=1e-12, out=None)
其中,p表示范数(这里是2范数),dim表示计算范数的维度(默认为1),eps是为了防止分母为0;
pytorch中的normalize函数本质上就是针对某个维度进行归一化,公式为:
方便记忆,二维矩阵中, dim=1表示在行内进行归一化,dim=0表示在列内进行归一化。
在使用过程中,对dim的理解不够到位,来三个代码实验一下。
示例1:dim=1
a = F.softmax(torch.randn((1, 3, 4)), 1)
b = F.normalize(a)
输出:
// a
tensor([[[0.2621, 0.2830, 0.3758, 0.0260],
[0.3634, 0.3750, 0.5382, 0.1085],
[0.3744, 0.3420, 0.0860, 0.8655]]])
// b
b: tensor([[[0.4489, 0.4870, 0.5676, 0.0298],
[0.6224, 0.6454, 0.8130, 0.1243],
[0.6412, 0.5885, 0.1299, 0.9918]]])
代码中针对维度1进行归一化。维度1有3个通道,具体的计算细节为
示例2:dim=2
a = F.softmax(torch.randn((1, 3, 4)), 1)
c = F.normalize(b, dim=2)
// a
tensor([[[0.0861, 0.1087, 0.0518, 0.3551],
[0.8067, 0.4128, 0.0592, 0.2884],
[0.1072, 0.4785, 0.8890, 0.3565]]])
// c
tensor([[[0.2237, 0.2825, 0.1347, 0.9230],
[0.8467, 0.4332, 0.0621, 0.3027],
[0.0997, 0.4447, 0.8262, 0.3313]]])
这里作用的是维度2,可以认为维度2有4个通道,计算细节为:
示例3:dim=0
a = F.softmax(torch.randn((1, 3, 4)), 1)
c = F.normalize(b, dim=0)
// a
tensor([[[0.0861, 0.1087, 0.0518, 0.3551],
[0.8067, 0.4128, 0.0592, 0.2884],
[0.1072, 0.4785, 0.8890, 0.3565]]])
// c
tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
这里作用的是维度0;维度0上只有1个通道,因此归一化之后全为1,即
来源:https://jingliu.blog.csdn.net/article/details/118115681


猜你喜欢
- 在WEB2.0 网页充斥的年代,身边无时无刻都听到这样的声音:“拒绝海报式设计,要做有用的设计,要简洁,要清爽,要大气”产品经理
- 目录一、对比数据类型二、可变集合构造方法三、不可变集合的构造方法四、集合构造注意事项 Python集合又是一种新的数据类型,集合有
- 微信小程序官方是没有提供退出的API的,但是在navigator这个组件中,是有退出这个功能的:详情参考官方文档:navigator。示例代
- 说明1、PaddleOCR是基于深度学习的ocr识别库,中文识别精度相当还不错,能够应对大多数文字提取需求。2、需要依次安装三个依赖库,sh
- 前言selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如
- 今天介绍一下 go语言的并发机制以及它所使用的CSP并发模型CSP并发模型CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过
- 最近在配置mysql服务器需要用到的一些设置,经过测试发现比较不错的配置方案,亮点在最后啊先说一点问题: Mysql中的InnoD
- 继续练手,根据之前获取汽油价格的方式获取了金价,暂时没钱投资,看看而已#!/usr/bin/env python# -*- coding:
- 本文实例讲述了Python读取Pickle文件信息并计算与当前时间间隔的方法。分享给大家供大家参考,具体如下:python—–读取Pickl
- Django中的静态文件夹static在创建好Django项目时默认是没有的,需要我们手动自己去创建,static文件夹里主要存放一些能暴露
- SQL Server创建临时表:创建临时表 方法一: &n
- 一、前言最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程。二、过程由于开发需要在生产环节中修复数据,需要执行
- 本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下from turtle import *from time
- 没有使用队列,也没有线程池还在学习只是多线程 #coding:utf8 import urllib2,sys,re import threa
- 之前在写连表查询的时候,老是分不清楚where和on的区别,导致有时写的SQL会出现一点小的问题,这里专门写篇文章做下记录,如果你也分不清,
- flask中的sqlalchemy 相比于sqlalchemy封装的更加彻底一些 , 在一些方法上更简单首先import类库:在CODE上查
- 分享一个 * 真网页拾色器(调色板),颜色丰富216色,使用方便。运行截图:<html id="container"
- 图片太大了,上百张图用photoshop改太慢,就想到用python写个简单的批处理。功能简单就是把原图按比例缩小# -*- coding:
- 从一个问题开始最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这
- 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用MySQL数