批归一化BN层总结

今天总结一下之前学习的批归一化层也就是Batch Normalize层。

PyTorch中的BN层:

PyTorchtorch.nn模块中提供三种归一化操作,分别用于不同的输入数据:

  • BatchNorm1d(num_features, eps=1e-5, momentum=0.1, affine=True, track_running_stats=True) 一般用于输入数据是,由2d数据组成的3d数据。
  • BatchNorm2d(num_features, eps=1e-5, momentum=0.1, affine=True, track_running_stats=True)一般用于输入数据是,由3d数据组成的4d数据。(这一个是最常用的,例如一个图片是3通道,组成一个batch就是4d数据了
  • BatchNorm3d(num_features, eps=1e-5, momentum=0.1, affine=True, track_running_stats=True)一般用于输入数据是,由4d数据组成的5d数据。

从上面看,这三种函数的参数是一致的(不同的PyTorch应该有所差异),现在看看这些参数的作用

  1. num_features:一般是输入的数据的通道数,(这个要自己设定,没有默认值哦);

  2. eps=1e-5:为数值或者计算稳定性添加到分母中的一个值,个人理解就是计算公式最后面分母中的ε(诶普西龙);

  3. momentum=0.1:用于running_meanrunning_var的计算添加的一个参数,其计算公式为:
    x ^ new = ( 1 − momentum ) × x ^ + momemtum × x t \hat{x}_\text{new} = (1 - \text{momentum}) \times \hat{x} + \text{momemtum} \times x_t x^new=(1momentum)×x^+momemtum×xt 解释: x ^ \hat{x} x^ 是历史的统计量,而 x t x_t xt 是当前的观察值,或者当前batch计算得出的平均值或者方差。最终求得值,一般作为在预测阶段时的均值和方差。

  4. affine=True:这个表示是否需要可变参数γ(伽马)和β(贝塔),默认是需要;

  5. track_running_stats=Truerunning_meanrunning_var会跟踪不同batch数据的meanvariance,但仍然是用每个batchmeanvariancenormalization。(有的版本已经没有这个参数了,而且这个情况比较多可以参考知乎:链接);

BN层的计算过程:

(1)先给出大神论文中的计算过程和公式:
在这里插入图片描述
(2)一个简单直观的举例:
在这里插入图片描述
这样就不用多解释了,最后基本可以获得一个组均值为 β 、方差为 γ^2的分布的新数据。案例参考链接

BN的作用和意义:

(1)BN层的作用和优点

  • 防止“梯度弥散”
  • 加速网络收敛速度
  • 可以使用较大的学习率
  • 可代替其他正则方式,例如Dropout等

(2)不足的地方:

  • 有文献显示,并不是所有的数据集都适合BN操作。

(3)如果想深入了解,推荐学习链接:

[1]:https://blog.csdn.net/HMH2_YY/article/details/86493985
[2]:https://zhuanlan.zhihu.com/p/33173246
[3]:https://blog.csdn.net/qq_25737169/article/details/79048516

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值