再说说caffe里的batch normalization layer

最近尝试用ResNet-50和ShuffleNet做人脸识别,实验还没跑完,但发现batch normalization有些需要注意。


网上搞来的ResNet-50或ShuffleNet的prototxt里面往往会这么搞:
conv(no bias)-bn-scale
其中conv是没有bias的,bn用caffe里原来的自己写的基于cublas运算的版本,不带bias和scale,所以为了按照bn论文里原作者的建议,在bn后面又加了一个带bias的scale layer。
我自己基于cudnn写了一个bn layer,基于cudnn提供的接口,自带scale和bias,不过如果把scale和bias的learning rate和decay rate都设置为0,那也相当于没有scale和bias。


而以前我一直是这么用的:
conv(with bias)-bn
其中conv带bias,bn不带scale和bias。


经过很多实验发现,至少对于我在做的人脸识别问题,conv(no bias)-bn-scale要比conv(with bias)-bn更差。即使学习率已经降到比较小了,前一个模型在验证集(我直接用lfw作为验证集)上的准确率仍然会在较大的幅度内震荡,而后一个模型则可以完全收敛到极小的震荡。


原因也很好解释,因为bn之后又加了scale,会导致梯度反向传播过程中发生梯度膨胀,使模型不稳定。然而,在网上能找到的使用了bn的大部分prototxt里面,似乎前者仍然是主流。


最后,我只是在人脸识别这一个问题上得到了这样的结论,在其他问题上是什么样,还有待于更多实验验证。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值