fine-tuning

JLU-IPVR

听笙

首先解释一下什么叫fine-tuning,基于一个训练好的caffe模型使用自己的数据,利用训练好的模型的权重参数值,通过修改最后一层的参数和输出类别,训练出一个适合自己数据的模型。

在实际学习的和做工程的过程中我们会遇到一个问题,就是数据量的问题,我们很难采集到大量的数据,因为我们都知道做深度学习需要使用到大量的数据,但是在我们之前已经有很多大牛,神犇为我们做了很多工作,我们需要做的只不过是在他们的基础上加上一点我们自己的数据,就可以得到我们想要的效果了。

准备数据集

    还是以mnist为例,已经使用了原始mnist数据训练好了一个模型,使用自己的数据,在这个模型的基础上fine-tuning一个自己的模型,不过这次只做五个数字的识别0-4,训练集4000张,每个数字800张,验证集1000张,每个数字200张。将数据装换为LEVELDB格式,并且生成均值文件。

    调整网络参数

使用的lenet网络,首先在输入层data层,修改source和meanfile,根据之前生成的leveldb以及mean.binaryproto最后一层的输出类别,将10改为5,并且修改最后一层的名字。具体修改如下:

可以看到修改了mean_file的路径,source的路径,还有test里batch_size的大小改为20(因为solver里test_iter的大小设置为100,保证这两个数相乘的大小为2000)train里的batch_size的大小依然为100(因为solver里的test_interval的大小设置为80,,保证这两个数相乘大小为8000)。


可以看到最后一层的名字友ip2改为ip2-cvpr(所有的ip2都要修改为ip2-cvpr)。还有num_output的大小由10改为5,因为只做5个数字的分类。调整学习率,因为最后一层是重新学习的,因此需要有更快的学习速率,因此将weight和bias的学习速率加快10倍。

修改solver

test_interval修改的原因前面已经说过了,base_lr由0.01改为0.001,这个是很重的,fine-tuning的基本学习率不能太大否则会找不到局部最优值。最后的max_iter是我想训练100个epoch每个epoch需要迭代80次。其他的都没有做过什么修改。

开始训练

训练结果


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值