caffe finetune微调

  • 什么是fine-tuning:

       在别人基于caffe训练好的模型(如caffenet,googlenet等)的基础上,利用别人训练好的模型的权重参数值,通过训练自己的图片集修改最后一层的(也就是softmax)的参数和输出类别,说白了就是网络层的前面层不变作为一个特征提取器,只改变最后一层作为一个分类器,最后的训练就相当于训练了一个适合自己需求的分类器。

       finetune需要下面几个文件:

      train_val.prototxt 

      deploy.prototxt(测试时用到)

      solver.prototxt

     caffemodel(别人训练过的)

步骤:

1.修改输入输出均值文件,若有网络名字也要修改。输入中的数据的数据格式大小也要记得修改。输出时如果最后一层不是全连接(比如:squeezenet),在最后的num_output上修改。

2.修改最后一层的名称,与修改网络名字的原理一样。因为已训练好的模型中没有与新的层进行匹配的结果,因此就会以新的随机值初始化最新创建的层。不匹配就会重新开始训练这一层,而前面的层也不会改变。

3.学习速率,由于finetune是在局部进行微调,因此学习速率base_lr不能太大,选择0.01,0.001...并且我们希望学习速率能随着迭代的次数不断降低,而且学习速率降低的幅度更快一些。这样以来,在使用step的策略时,stepsize可以更小一些。也就是运行更少的次数,降低一次lr。

4.因为最后一层是重新学习,因此需要有更快的学习速率相比较其他层,因此我们将,weight和bias的学习速率加快10倍。

5.train与test中的batch_size过大不修改,会出现许多Restarting data prefetching from start。跑的速度感觉也很慢,是因为自己的数据集比模型训练的数据集小得多,而我的批处理大小是相同的。因此,很明显,为了测试网络,网络必须从一开始就预先获取大量数据。但这样的话,GPU的占有率也比较高。

6.deploy.prototxt与train_val.prototxt要修改得一致。

dim: 1   num,对待识别样本进行数据增广的数量,可自行定义。一般会进行5次crop,之后分别flip。如果该值为10则表示一个样本会变成10个,之后输入到网络进行识别。如果不进行数据增广,可以设置成1 
dim: 3  通道数,表示RGB三个通道 
dim: 128  图像的长和宽 

参考:https://blog.csdn.net/u010402786/article/details/70141261

https://blog.csdn.net/qq_18644873/article/details/84634580

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值