training from scratch:从新训练一个网络,所有参数都被随机初始化
fine-tuning:是对某个模型,在训练好的参数的基础上,进行微调
一、步骤
参考:https://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html
1.训练数据和测试数据
(1)准备训练集、测试集的txt,图像路径之后一个空格跟着类别的ID,ID必须从0开始,要连续
数据集要打乱,不然很可能不收敛
(2)使用convert_imageset工具
-gray:是否以灰度图的方式打开图片,默认为false
-shuffle:是否随机打乱图片顺序,默认为false
-backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
-resize_width/resize_height:改变图片的大小,默认为0,不改变
-check_size:检查所有的数据是否有相同的尺寸,默认为false,不检查
-encoded:是否将原图片编码放入最终的数据中,默认为false
-encode_type:与前一个参数对应,将图片编码为哪一个格式:‘png’,’jpg’…
2.数据集的均值文件
使用compute_image_mean工具
3.修改网络最后一层
4.调整Solver的配置参数
通常学习速率、步长、迭代次数都要适当减少,最后一层的学习率加快
lr_mult是学习率系数,最终学习率为 base_lr*lr_mult,如果有两个 lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率,一般偏置项的学习率是权值学习率的两倍
5.启动训练,加载pretrained模型的参数
使用caffe train工具
二、调参技巧
PS:这部分持续更新,现在真的不是很会
https://blog.csdn.net/u010402786/article/details/70141261
增大最后一层的lr_mult,将weight和bias的学习速率加快10倍,让非微调层学习更快
将其它层的lr_mult设置为0,来完全阻止最后一层以外的所有层的微调
出现不收敛的问题,将lr设的小一点,一般从0.01开始,如果出现loss=nan就不断往小调整
可以把accuracy和loss的曲线画出来,方便设定stepsize,一般在accuracy和loss都趋于平缓的时候就可以减小lr