理解Batch Normalization批标准化

 torch.nn.BatchNorm2d:对输入batch的每一个特征通道进行normalize

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

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

input:


out:

【说明】
torch.nn.BatchNorm2d采用公式如下:

,其中

表示输出,为输入,表示输入的均值,为的方差,默认值为,为1,为0

【计算过程】
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)

输出结果如下,与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]]]

BatchNorm的优点总结:

  • 没有它之前,需要小心的调整学习率和权重初始化,但是有了BN可以放心的使用大学习率,但是使用了BN,就不用小心的调参了,较大的学习率极大的提高了学习速度;
  • Batchnorm本身上也是一种正则的方式,可以代替其他正则方式如dropout等;
  • 另外,个人认为,batchnorm降低了数据之间的绝对差异,有一个去相关的性质,更多的考虑相对差异性,因此在分类任务上具有更好的效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值