caffe 中为什么bn层要和scale层一起使用
这个问题首先你要理解batchnormal是做什么的。它其实做了两件事。 [1] 对输入进行归一化,xnorm=x−μσ,其中, μ 和 σ是计算的均值和方差 —— 对应 Caffe BatchNorm 层 [2] 归一化后进行缩放和平移,得到输出 y=γ⋅xnorm+β —— 对应 Caffe Scale 层 Scale层设置bias_term=True,即对应于 β
Caffe 的 BN(BatchNorm ) 层共有三个参数参数:均值、方差和滑动系数,BN层结构如下:
layer {
bottom: "data"
top: "data"
name: "bn_data"
type: "BatchNorm"
batch_norm_param {
use_global_stats: false
include:
{
phase:TRAIN
}
}
layer {
bottom: "data"
top: "data"
name: "bn_data"
type: "BatchNorm"
batch_norm_param {
use_global_stats: true
include:
{
phase:TEST
}
}
- use_global_stats:如果为真,则使用保存的均值和方差,否则采用滑动平均计算新的均值和方差。该参数缺省的时候,如果是测试阶段则等价为真,如果是训练阶段则等价为假。
- moving_average_fraction:滑动平均的衰减系数,默认为0.999
- eps:分母附加值,防止除以方差时出现除0操作,默认为1e-5(不同框架采用的默认值不一样)
参考链接:https://blog.csdn.net/zziahgf/article/details/78843350