caffe笔记: VGG16预训练模型微调

在caffe里微调VGG-16用于自己的问题

以SnailTyan的预训练模型VGG-16为例,记录一些我这个小白最开始不能理解的概念
GitHub:https://github.com/SnailTyan/caffe-model-zoo/tree/master/VGG16

caffe相关概念:

  1. caffe里面的预训练模型就是一个网络在很大的数据集上训练得到的结果。.caffemodel文件里面保存着网络的结构和参数(从零开始开始训练过程中用snapshot得到的也是这个)。加载预训练模型和从零开始训练的根本区别就是初始权重。一个是加载一个包含权重的文件(caffemodel),另一个是以某种方式初始化权重。
  2. 做微调时,没有额外新的配置文件,唯一要做的就是修改用于预训练的配置文件(solver.prototxt & train_val.prototxt),使他们更适合做微调。

微调(finetune)概念:

  1. 什么时候应该使用别人的预训练模型?:
    最好是想干的事和预训练模型所基于的问题比较相似,这样预训练模型里面的基本feature才有用,才比较有可能靠自己比较少的数据练出一个还凑合的模型。

具体操作:

  1. 加快靠后的全连接层的学习率。对于VGG,就是最后两个全连接层
    方法:设置lr_mult 和decay_mult参数
layer {
  bottom: "fc6"
  top: "fc7"
  name: "fc7"
  type: "InnerProduct"
  #需要添加或修改的部分---------------------------
  param {
  	lr_mult: 5         #此层学习率为solver中设的学习率的5倍
  	decay_mult: 0      #权重衰减
  	}
  param {
  	lr_mult: 5
  	decay_mult: 0
  	}
  	#--------------------------------------------
  inner_product_param {
    num_output: 4096
  }
}

你可能感兴趣的:(caffe)