caffe增加新分支后固定参数进行finetuning

    caffe训练时正常的finetuning只需要在调用训练脚本时通过--weights选项指定好caffemodel即可,这种方式在finetuning的过程中会更新所有参数。我现在有个需求,要在已训练好的网络结构中增加一个新的分支,而finetuning时固定已经训练好的参数,只单独训练这个新分支的参数,怎么做?

   方式一:

  1. 首先,你需要这个新网络的初始caffemodel,这个caffemodel里面除了新增分支以外的其它参数来自于老网络已训练好的caffemodel,新分支则为默认参数;
  2. 在新网络的prototxt中将新分支以外的含有参数的层新增lr_mult参数,并设置为0。意思就是将学习率乘以0,也就是不更新参数(参考以下配置,亲测ok)。
layer {
type: "InnerProduct"
param { # 对应第1个参数blob的配置,也就是全连接层的参数矩阵的配置
    lr_mult: 0 # 学习率为0,其他参数可以看caffe.proto里面的ParamSpec这个类型
}
param { # 对应第2个参数blob的配置,也就是全连接层的偏置项的配置
    lr_mult: 0 # 学习率为0
}
}

 

你可能感兴趣的:(深度学习,Caffe)