当前位置:   article > 正文

BatchNorm和LayerNorm的比较_batchnorm和layernorm区别

batchnorm和layernorm区别

BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布
LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;
在这里插入图片描述

batch normalization对一个神经元的batch所有样本进行标准化,layer normalization对一个样本同一层所有神经元进行标准化,前者纵向 normalization,后者横向 normalization。

在这里插入图片描述
在这里插入图片描述

batch normalization的缺点:因为统计意义,在batch_size较大时才表现较好;不易用于RNN;训练和预测时用的统计量不同等。
layer normalization就比较适合用于RNN和单条样本的训练和预测。但是在batch_size较大时性能时比不过batch normalization的。

以batchnorm为sample

input为2 x 3 x 4 x 5,其中,2:batch中样本数量,3:每个样本通道数,4:每个样本行数,5:每个样本列数
调用代码如下:

bn  = torch.nn.BatchNorm2d(3) # 参数3表示特征通道数
out = bn(input)
  • 1
  • 2

input:
在这里插入图片描述

out:
在这里插入图片描述
【计算过程】
torch.nn.BatchNorm2d对每一特征通道进行normalize,因此会计算出所有样本每一通道的均值和方差,以第一通道为例

mean_channel1   = torch.mean(input[:, 0, :, :]) # = 142.8500
normed_channel2 = torch.var(input[:,0, :, :], unbiased=False) # = 218.5775
                                              # unbiased参数需要设置为False,否则
                                              # 计算出方差为无偏估计,与当前结果不同
                                              # 第二、第三通道相同设置
normed_result_channel1 = (input[:, 0, :, :]-mean_channel1)/((var_channel1+1e-5)**0.5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出结果如下,与torch.nn.BatchNorm2d结果一致
[[[-0.1251, -0.3280, 0.0101, 0.0778, 0.1454],
[-0.3280, -0.2604, 0.0101, 0.0101, 0.1454],
[-0.5310, -0.3957, -0.3280, -0.3957, 0.2131],
[ 6.0977, -0.3957, -0.8692, -0.5310, 0.0101]],

[[-0.1251, -0.3280, -0.1928, -0.3280, -0.2604],
[-0.1251, -0.1928, -0.1251, -0.0575, -0.1251],
[-0.1928, -0.1251, -0.1251, 0.0778, -0.0575],
[-0.1251, 0.0101, 0.0101, 0.0778, 0.0778]]]

参考链接:https://blog.csdn.net/u012633319/article/details/109107260

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/458186
推荐阅读
相关标签
  

闽ICP备14008679号