之所以问这个问题,是因为在VGG19中有批量标准化层(例如,不同于VGG16)。
我正在尝试在Caffe中训练Faster-RCNN网络。我这样做的方式是:
对于卷积层的lr_mult
值,我没有做任何更改。在prototxt文件中,卷积层(例如conv1_1
等具有非零的lr_mult
值,而批处理规范化层的lr_mult
的值设置为0(名为{ {1}})。
批次归一化层被冻结的事实是否也意味着卷积层也被冻结了?还是应该在名为conv1_1/bn
的图层中也将lr_mult
设置为0?
更新:在将所有卷积层的convX_X
归零的同时运行另一个训练过程之后,训练时间大大减少,这意味着答案是lr_mult
lr_mult
层中的值也需要设置为0。
答案 0 :(得分:1)
要使用Caffe中的batchnorm正确冻结卷积层,您应该:
lr_mult
参数设置为0 lr_mult
参数设置为0,将use_global_stats
设置为true
: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
}
}
批处理归一化层被冻结的事实是否也意味着卷积层也被冻结了?
当然不是。但是,通过使用propagate_down
参数可以达到以下效果:How do I to prevent backward computation in specific layers in caffe。