Pytorch中关于F.normalize计算理解

 更新时间:2023年02月02日 10:17:42   作者:静静喜欢大白  
这篇文章主要介绍了Pytorch中关于F.normalize计算理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

关于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,即

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python任务调度实例分析

    python任务调度实例分析

    这篇文章主要介绍了python任务调度实现方法,实例分析了任务调度的原理与Python实现方法,需要的朋友可以参考下
    2015-05-05
  • python 使用ctypes调用C/C++ dll详情

    python 使用ctypes调用C/C++ dll详情

    这篇文章主要介绍了python 使用ctypes调用C/C++ dll详情,文章首先通过导入ctypes模块,加载C/C++ dll到python进程空间展开主题相关内容,需要的小伙伴可以参考一下
    2022-04-04
  • python logging模块的使用详解

    python logging模块的使用详解

    这篇文章主要介绍了python logging模块的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • Python数据分析模块pandas用法详解

    Python数据分析模块pandas用法详解

    这篇文章主要介绍了Python数据分析模块pandas用法,结合实例形式详细分析了Python数据分析模块pandas的功能、常见用法及相关操作注意事项,需要的朋友可以参考下
    2019-09-09
  • Python交互式图形编程的实现

    Python交互式图形编程的实现

    这篇文章主要介绍了Python交互式图形编程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python中查看变量的类型内存地址所占字节的大小

    Python中查看变量的类型内存地址所占字节的大小

    这篇文章主要介绍了Python中查看变量的类型,内存地址,所占字节的大小,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 使用__init__.py将文件夹设置成Python模块示例详解

    使用__init__.py将文件夹设置成Python模块示例详解

    这篇文章主要为大家介绍了使用__init__.py将文件夹设置成Python模块示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python在Matplotlib图中显示中文字体的操作方法

    Python在Matplotlib图中显示中文字体的操作方法

    这篇文章主要介绍了Python在Matplotlib图中显示中文字体的方法,本篇主要针对在Ubuntu系统中,matplotlib显示不了中文的问题,尤其是在无法安装系统字体的情况下,解决Python绘图时中文显示的问题。需要的朋友可以参考下
    2019-07-07
  • Python数据结构与算法之完全树与最小堆实例

    Python数据结构与算法之完全树与最小堆实例

    这篇文章主要介绍了Python数据结构与算法之完全树与最小堆,结合实例形式分析了Python完全树定义及堆排序功能实现相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Python的GUI编程之Pack、Place、Grid的区别说明

    Python的GUI编程之Pack、Place、Grid的区别说明

    这篇文章主要介绍了Python的GUI编程之Pack、Place、Grid的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论