开发者

Pytorch中关于F.normalize计算理解

目录
  • 关于F.normalize计算理解
    • 动机
    • 简介
    • 举例
  • Pytorch中normalize应用
    • 示例1:dim=1
    • 示例2:dim=2
    • 示例3:dim=0
  • 总结

    关于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(in编程客栈pphput, 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],

             [www.devze.com0.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
    tensorphp([[[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(torc开发者_JAV培训h.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计算理解

    总结

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

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜