fine tuning 模型微调笔记

这个博客主要记录在这个 github repository 中个人觉得比较重要的部分,同时增加了个人之前的一些理解。

什么是微调
  • 在实际应用中,针对某个任务,自己的训练数据不多,或者该任务中的数据经常需要变动(易过时),这样重新训练一个model不现实或者代价太大。我们可以先找到一个同类的别人训练好的模型,把别人现成的训练好了的模型拿过来,换成自己的数据,调整一下参数,再训练一遍,或者把之前的model拿过来用变动过后的数据再训练一遍。这就是微调(fine-tune)。
怎么微调
  • 在Pytorch中已经为我们训练好了一些经典的网络模型,这些模型可以用来微调。
  • PyTorch里面提供的经典的网络模型都是官方通过Imagenet的数据集与训练好的数据,如果我们的数据训练数据不够,这些数据是可以作为基础模型来使用的
为什么要微调
  • 对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠微调已经训练好的模型。
  • 可以降低训练成本:如果使用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用 CPU 都完全无压力,没有深度学习机器也可以做。
  • 前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
如何微调 (关键)
  • 对于不同的领域微调的方法也不一样,比如语音识别领域一般微调前几层图片识别问题微调后面几层
    (1)对于图片来说,我们CNN的前几层学习到的都是低级的特征,比如,点、线、面,这些低级的特征对于任何图片来说都是可以抽象出来的,所以我们将他作为通用数据,只微调这些低级特征组合起来的高级特征即可,例如,这些点、线、面,组成的是园还是椭圆,还是正方形,这些代表的含义是我们需要后面训练出来的。
    (2)对于语音来说,每个单词表达的意思都是一样的,只不过发音或者是单词的拼写不一样,比如 苹果,apple,apfel(德语),都表示的是同一个东西,只不过发音和单词不一样,但是他具体代表的含义是一样的,就是高级特征是相同的,所以我们只要微调低级的特征就可以了

原项目中有一个微调实例

在微调实例中,feature extraction 部分的网络是不参与反向传播的,也就是权重值在每次迭代的时候都是不会变化的,所以同一张图片输入到该网络中得到的输出是相同的,而每一次如果都从头输入图片的话需要消耗很大的资源,所以可以把这些输入到FC层的结果保存下来,从而节省计算时间,同时,矩阵乘法主要是在CNN层,在FC层的计算量是很少的,所以同时可以节省大量的计算资源,采用这种 fine-tune 的方法可以在CPU上完成模型微调。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值