Fine tuning Tutorial
介绍
在深度学习领域,进行一个模型的训练往往需要大量的数据,否则会造成无法很好地拟合的问题。但是大多数情况下,现有数据量都是不够让模型很好地训练。
举个栗子
直接 from scratch 训练容易过拟合,比如你有少量训练图像都是雪地里的阿拉斯加犬,然后直接from scratch去训练模型,经过很多epoch的迭代训练,很可能会造成模型学到的特征阿拉斯加犬都是在雪地里面,然后你给一张在草地里的阿拉斯加犬就无法识别,反而你给一个在雪地里面的藏獒被错误识别成阿拉斯加犬。这就是过拟合,学习到了图片中非常个性的特征,不具有很好的泛化能力。
方法
Fine tuning就能较好地解决这个问题,现在常用的解决方案有两种:
- 使用pretrained model 做Feature extract,然后再去做分类等任务。(也就是固定预训练模型参数,把预训练模型当成一个完整的特征提取器,然后将给定image转化成一个feature vector)
- 使用pretrained model 做微调,增删模型后面若干层的网络结构,然后可以选择保留预训练模型的参数,这样可以保持模型的泛化能力,同时和后面调整的网络一起联合训练,使得模型更好地学习到新的数据特征。
优点
- 解决了我们小样本下使用复杂网络上容易过拟合的问题
- 节省了训练时间,因为网络前面几层提取的特征具备一定的泛化能力
技巧
在数据量非常少的时候,建议使用预训练模型做特征抽取。在数据量较大的时候,建议使用fine tuning微调。
实战
TODO
Author: leexuan
Link: http://xuanli19.github.io/2019/08/15/Transfer-Learning/
License: 知识共享署名-非商业性使用 4.0 国际许可协议