个人域名 公司网站,磁力猫引擎入口,外链生成,手机移动端网站是什么【Python–torch.nn.functional】F.normalize介绍 代码说明 文章目录【Python--torch.nn.functional】F.normalize介绍 代码说明1. 介绍2. 代码说明2.1 一维Tensor2.2 二维Tensor2.3 三维Tensor3. 总结1. 介绍
import torch.nn.functional as F
F.normalize(input: Tensor, …【Python–torch.nn.functional】F.normalize介绍 代码说明 文章目录【Python--torch.nn.functional】F.normalize介绍 代码说明1. 介绍2. 代码说明2.1 一维Tensor2.2 二维Tensor2.3 三维Tensor3. 总结1. 介绍
import torch.nn.functional as F
F.normalize(input: Tensor, p: float 2.0, dim: int 1, eps: float 1e-12) - Tensorinput: 是一个任意维度的Tensor类型的数据p默认为2表示2范数同理p1表示1范数dim 默认为1在输入数据input的shape是二维的且p2情况下表示对行进行操作即所有元素除以第一行元素的根号下平方和dim0 时在输入数据input的shape是二维的且p2情况下表示对列进行操作即所有元素除以第一列元素的根号下平方和dim为其他值时之后通过代码分析。 eps默认为1e-12防止除0。 因此Normalize对应的公式为
2. 代码说明
2.1 一维Tensor
c torch.Tensor([1, 2, 3])
print(F.normalize(c, dim0))tensor([0.2673, 0.5345, 0.8018])
torch.Size([3])
解释
默认dim1是按行操作但是一维的Tensor是列向量所以必须指定dim0
默认p2所以这个一维的Tensor列向量每个元素都除以sqrt(1**2 2**2 3**2)2.2 二维Tensor
import torch.nn.functional as F
import torcha torch.arange(20, dtypetorch.float).reshape(4,5)
b F.normalize(a, dim0)
c F.normalize(a, dim1)
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.]])
# dim0时即沿第一维度(列)做归一化
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]])
# dim1时即沿第二维度(行)做归一化
# 维度记忆技巧:最后一个维度始终是行从后向前推:行、列、通道
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, dim0)) # dim 0, 1、10为1组进行norm。print(F.normalize(a, dim2)) # 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就是按照最远的一组。