Caffe BN+Scale层和Pytorch BN层的对比

因为最近在将一个caffe的model移植到pytorch上,发现移植过去就没法收敛了,因此专门研究了一些细节。
batch normalization的公式如下:
xE[x]Var[x]+ϵλ+β
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的,目前不是很清除作用,等明白了再来更新。

猜你喜欢

转载自blog.csdn.net/elysion122/article/details/79628587
今日推荐