• nn.functional.normalize


    torch.nn.functional.normalize

    官方文档: normalize

    Performs L p L_{p} Lp normalization of inputs over specified dimension.

    作用: 在指定的维度计算 p p p范数,默认的计算是2范数

    计算公式如下

    v = v m a x ( ∣ ∣ v ∣ ∣ p , ϵ ) v = \frac{v}{max(||v||_{p}, \epsilon)} v=max(∣∣vp,ϵ)v

    下面对函数的参数进行解释

    torch.nn.functional.normalize(input, p=2.0, dim=1, eps=1e-12, out=None)

    • input: 输入tensor
    • p: 归一化的范数,默认为2范数
    • dim: 计算维度 (the dimension to reduce)
    • eps: 防止分母为0的一个很小得数
    • out: 输出tensor,如果指定了这个tensor,操作会变得不可微

    下面举两个例子,一个二维一个三维

    二维例子

    input2 = torch.randn((3, 4))
    output2_1 = nn.functional.normalize(input2)
    print(output2_1)
    
    '''
    input2:
    tensor([[-0.9216,  0.2382,  0.0036,  0.1124],
            [ 0.6481,  0.0569,  2.6192,  0.6064],
            [-0.5110, -0.4260,  1.5873, -0.3685]])
    
    output2_1
    tensor([[-0.9615,  0.2485,  0.0037,  0.1173],
            [ 0.2343,  0.0206,  0.9469,  0.2192],
            [-0.2903, -0.2420,  0.9018, -0.2094]])
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    normalize默认是计算dim=1的,输入矩阵是(3,4),计算第1维就是4那一维(dim=0代表3那一维)。如下图所示,dim=1代表4那一维度,就是红色的那四个元素计算归一化,蓝色同理

    在这里插入图片描述

    − 0.9615 = − 0.9216 ( − 0.9216 ) 2 + ( 0.2382 ) 2 + ( 0.0036 ) 2 + ( 0.1124 ) 2 0.2485 = 0.2382 ( − 0.9216 ) 2 + ( 0.2382 ) 2 + ( 0.0036 ) 2 + ( 0.1124 ) 2 0.0037 = 0.0036 ( − 0.9216 ) 2 + ( 0.2382 ) 2 + ( 0.0036 ) 2 + ( 0.1124 ) 2 0.1173 = 0.1124 ( − 0.9216 ) 2 + ( 0.2382 ) 2 + ( 0.0036 ) 2 + ( 0.1124 ) 2

    0.9615=0.9216(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.2485=0.2382(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.0037=0.0036(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.1173=0.1124(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2" role="presentation" style="position: relative;">0.9615=0.9216(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.2485=0.2382(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.0037=0.0036(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)20.1173=0.1124(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2
    0.96150.24850.00370.1173=(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2 0.9216=(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2 0.2382=(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2 0.0036=(0.9216)2+(0.2382)2+(0.0036)2+(0.1124)2 0.1124

    三维例子

    input3 = torch.randn((2, 3, 4))
    output3_1 = nn.functional.normalize(input3)
    print(output3_1)
    
    '''
    input3
    tensor([[[ 0.0125,  0.0806,  1.0750, -0.9401],
             [ 0.1409,  2.8251, -0.2162,  0.9788],
             [-1.1588,  0.7537, -0.0691, -0.6371]],
    
            [[-0.2402, -0.8545,  1.2948, -1.4992],
             [-0.1676, -1.0821,  1.7947, -1.5175],
             [-0.1969,  0.3079, -1.2304, -0.7987]]])
    
    output3_1
    tensor([[[ 0.0107,  0.0276,  0.9784, -0.6270],
             [ 0.1207,  0.9658, -0.1968,  0.6529],
             [-0.9926,  0.2577, -0.0629, -0.4250]],
    
            [[-0.6805, -0.6048,  0.5114, -0.6582],
             [-0.4749, -0.7659,  0.7088, -0.6662],
             [-0.5580,  0.2180, -0.4859, -0.3507]]])
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    这里dim=1也就是3那一维,所以对3个数进行归一化,这里以0.0107为例

    0.0107 = 0.0125 ( 0.0125 ) 2 + ( 0.1409 ) 2 + ( − 1.1588 ) 2 0.0107 = \frac{0.0125}{\sqrt{(0.0125)^{2}+(0.1409)^{2}+(-1.1588)^{2}}} 0.0107=(0.0125)2+(0.1409)2+(1.1588)2 0.0125

  • 相关阅读:
    C# 异步编程中的任务取消机制
    Java面试八股文宝典:初识数据结构-数组
    Qt退出界面
    Django day08
    Python学习笔记(四)
    基于C语言实现进度条 | 附源码
    国华小状元1号年金险怎么样?好不好?
    乐鑫 ESP-Mesh-Lite:轻松覆盖更大范围,连接更多设备
    Vulnhub实战-prime1
    uniapp开发小程序,包过大解决方案
  • 原文地址:https://blog.csdn.net/weixin_41978699/article/details/126862161