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表示按行操作,则每行都是除以该行下所有元素平方和的开方

举例

Pytorch中关于F.normalize计算理解

Pytorch中关于F.normalize计算理解 Pytorch中关于F.normalize计算理解

Pytorch中关于F.normalize计算理解

最后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函数本质上就是针对某个维度进行归一化,公式为:

Pytorch中关于F.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个通道,具体的计算细节为

Pytorch中关于F.normalize计算理解

示例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个通道,计算细节为:

Pytorch中关于F.normalize计算理解

示例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,即

Pytorch中关于F.normalize计算理解

来源:https://jingliu.blog.csdn.net/article/details/118115681

标签:Pytorch,F.normalize
0
投稿

猜你喜欢

  • 解析php获取字符串的编码格式的方法(函数)

    2023-10-02 22:26:49
  • windows下python模拟鼠标点击和键盘输示例

    2021-11-12 21:06:32
  • python中os和sys模块的区别与常用方法总结

    2022-05-26 18:04:24
  • Android ProgressBar进度条和ProgressDialog进度框的展示DEMO

    2023-11-20 01:15:43
  • Python使用描述符实现属性类型检查的案例解析

    2022-07-30 00:39:15
  • Oracle 数据库操作类

    2023-07-24 06:58:42
  • django之自定义软删除Model的方法

    2023-11-17 21:31:12
  • Javascript"篱式"条件判断(翻译)

    2008-08-01 12:21:00
  • python3实现指定目录下文件sha256及文件大小统计

    2023-11-26 15:37:00
  • 用javascript实现select的美化

    2007-05-11 16:50:00
  • PyQT5之使用QT Designer创建基本窗口方式

    2023-10-06 05:59:41
  • 探讨如何配置SQL2008,让其允许C#远程外部连接的方法详解

    2024-01-23 10:51:09
  • pandas取dataframe特定行列的实现方法

    2022-03-05 15:51:29
  • python3爬虫之入门基础和正则表达式

    2023-04-11 12:48:02
  • python基础之内置函数

    2022-02-28 09:15:58
  • Django基于Token的验证使用的实现

    2023-06-14 18:43:54
  • Python jieba 中文分词与词频统计的操作

    2022-08-31 17:08:14
  • python 两种方法修改文件的创建时间、修改时间、访问时间

    2023-08-10 03:06:52
  • Python中yield返回生成器的详细方法

    2022-10-17 18:22:56
  • Python实现删除时保留特定文件夹和文件的示例

    2021-11-19 01:09:38
  • asp之家 网络编程 m.aspxhome.com