我对应该如何在模型中使用/插入"BatchNorm"
层感到有些困惑。
我看到几种不同的方法,例如:
ResNets:"BatchNorm"
+ "Scale"
(不共享参数)"BatchNorm"
层后紧跟"Scale"
层:
layer {
bottom: "res2a_branch1"
top: "res2a_branch1"
name: "bn2a_branch1"
type: "BatchNorm"
batch_norm_param {
use_global_stats: true
}
}
layer {
bottom: "res2a_branch1"
top: "res2a_branch1"
name: "scale2a_branch1"
type: "Scale"
scale_param {
bias_term: true
}
}
cifar10 example:仅
"BatchNorm"
在caffe附带的cifar10示例中,使用
"BatchNorm"
且后面没有任何"Scale"
:layer {
name: "bn1"
type: "BatchNorm"
bottom: "pool1"
top: "bn1"
param {
lr_mult: 0
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
}
cifar10
batch_norm_param
和TRAIN
的不同TEST
batch_norm_param: use_global_scale
在TRAIN
和TEST
阶段之间更改:layer {
name: "bn1"
type: "BatchNorm"
bottom: "pool1"
top: "bn1"
batch_norm_param {
use_global_stats: false
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
include {
phase: TRAIN
}
}
layer {
name: "bn1"
type: "BatchNorm"
bottom: "pool1"
top: "bn1"
batch_norm_param {
use_global_stats: true
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
include {
phase: TEST
}
}
那应该是什么?
如何在caffe中使用
"BatchNorm"
层? 最佳答案
如果您遵循原始论文,则批处理归一化后应跟随“缩放”和“偏置”层(可以通过“缩放”来包括偏差,尽管这会使“偏置”参数不可访问)。还应将use_global_stats
从训练(False)更改为测试/部署(True)-这是默认行为。请注意,您提供的第一个示例是用于部署的原型,因此将其设置为True是正确的。
我不确定共享参数。
我提出了一个拉式请求,以改进批标准化中的文档,但是由于要修改它而关闭了它。然后,我再也回不去了。
请注意,尽管我现在找不到对应的PR,但我认为不再需要lr_mult: 0
代替"BatchNorm"
。
关于machine-learning - 在咖啡中应如何使用“BatchNorm”层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41608242/