caffe && pytorch BN

BN在caffe中的实现

caffe BN

BN层主要有均值, 方差, γ γ , β β 四个参数,其中 γ γ , β β 是要学习的参数一个代表的是缩放系数,也就是将分布变胖或者变瘦,一个是偏移系数,将分布左右移动。进行BN操作的主要目的是,将数据的分布归一化到非线性函数敏感的区域也即线性区,避免进入饱和区,因为一旦进入饱和区,就会造成梯度消失, γ γ , β β 适当的将分布进行了变胖变瘦或者移动的这样的一个操作。

其中BN的均值,方差,beta,gamma都是变量。use_global_status只是控制 β β γ γ 是不是固定,如果要控制beta,gamma固定的话,在caffe里面是控制scale层的值不更新,在pytorch里面直接设置 β β γ γ requires_grad=False即可

1、use_global_status=False

训练的时候,设置use_global_status=False表示一个batch的计算的方差和均值都是来自于这个batch的数据的统计

2、use_global_status=True

测试的时候,设置use_global_status=True,表示一个batch的计算的方差和均值都是来自于整个数据集的统计,已经保存好了

caffe的bn层只是对输入做了一个归一化,没有用 γ,β γ , β 进行相关的操作,所以caffe的bn要与scale层结合,用scale层来实现 β,γ β , γ 的功能

pytorch BN

通过model.train()和model.eval()来决定bn层的均值方差来源

1、model.train()
均值方差统计来自于当前batch
2、model.eval()
均值和方差来自于整体数据

BN 2d

spatial bn的计算是在NxCxWXH的基础上运算的,那么是在channel的维度上进行bn操作,也即NxWxH为一组计算一个均值和方差,然后NxWxH对这一组的元素分别减去这个均值和方差,因为有C个通道,所以就会有C个均值和C个方差。假设某一层的参数通道数是C,那么所有的mean,var,weight,bias都是C维的,如图,lin_.1层有256个通道,因此所有的参数都是256维
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值