【转载】 Caffe BN+Scale层和Pytorch BN层的对比

原文地址:

https://blog.csdn.net/elysion122/article/details/79628587

-------------------------------------------------------------------------------------------------

因为最近在将一个caffe的model移植到pytorch上,发现移植过去就没法收敛了,因此专门研究了一些细节。

batch normalization的公式如下:

caffe和pytorch在代码细节上略有不同,但是基本功能是一样的。

Caffe 是使用BN层和Scale层来实现Batch normalization 的,简单地说就是BN层用来计算方差均值,Scale层进行归一化,这个很多技术博客都已经分析过了。

其中BN层中有三个mult_lr:0比较奇怪,经过查资料,我的理解是BN层记录了三个数据:均值、方差、滑动系数,这三个数据不需要学习,仅仅需要根据进入网络的数据进行计算,因此设置为0。据说新版的caffe已经不需要专门设置这三个数据了。

scale可以设置是不是需要bias,应该表示的是需不需要 ββ

Pytorch的BN层实现了计算均值方差并且归一化的步骤,现在不同的版本参数略有不同,最新的  0.4.* 版本  多了一个参数。

class torch.nn.BatchNorm3d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  • momentum=0.001和caffe默认值0.999,应该是一个意思,只不过一个是计算的1-momentum。
  • affine表示要不要两个系数γ和βγ,β

  • track_running_stats是    0.4(版本) 新出的一个参数,据说是追踪var和mean的,目前不是很清楚作用,等明白了再来更新。

猜你喜欢

转载自www.cnblogs.com/devilmaycry812839668/p/10630335.html
今日推荐