tf.layers.batch_normalization()方法

背景

之前在面试的时候,有很多次被问到Batch Normalization,它的作用,什么时候用,模型测试的时候还要不要进行Batch Normalization,下面简单的介绍一下

BN

BN操作就是批标准化,训练的时候对每一个batch标准化,具体的公式为:
在这里插入图片描述
即计算出当前batch的每个channel的均值mean和方差variance,令输入x减去均值u再除以标准差v,最后乘以scale参数gamma,加上shift参数beta,得到变换后的输出y。

作用

标准化使数据都服从正态分布,加快模型的训练速度,平稳收敛,缓解DNN训练中的梯度消失问题

BN层在train与inference时的差别

在训练时,我们可以计算出batch的均值和方差,迭代训练过程中,均值和方差一直在发生变化。但是在推理时,均值和方差是固定的,它们在训练过程中就被确定下来。《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中给出的确定方式和TensorFlow中存在不同,这里我们介绍TensorFlow中的方式,即采用滑动平均MovingAverage的方法,公式为: moving_average_value * momentum + value * (1 - momentum),其中value为当前batch的平均值或方差,moving_average_value为滑动均值或滑动方差。
最终,模型训练完毕后,在推理时使用滑动平均值moving_mean和滑动方差moving_variance对feature maps进行变换。

在模型中的哪些位置插入BN层

推荐在Conv层或FC层之后,或者非线性变换激活层之前插入BN层。原因见论文:
在这里插入图片描述
翻译一下就是先进行batch normalization,再进行非线性的激活操作,比如sigmoid或relu。

参考资料:
https://www.cnblogs.com/fclbky/p/12636842.html
(原文更全面一些)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值