[DL] Transfer Learning

迁移学习

摘自: cs231n资料
问题背景:

  • 数据集不够,很难在大量数据上训练CNN网络,而且这需要大量算力资源和时间。因此,通常将在大型数据集上训练好的网络(pretrained),保存其weights。将其作为新的场景下,网络的初始参数或者是特征提取器(看作已经训练好的性能不错的特征提取器)。

三个主要应用场景:

  1. CNN作为固定的特征提取器 feature extractor。
    在原pretrained CNN基础上,仅去掉最后一层全连接层(或者更多层)(得到分类scores的一层),剩余作为feature extractor。在增加一些全连接层在新的数据集上训练。(即训练时固定feature extractor 的参数)

  2. 在第一种的基础上,对feature extractor的weights也要进行微调fine-tuning
    为了防止过拟合,可以不tuning 所有layers, 固定前几层,仅tuning后几层。(底层提取的特征更具一般性,高层提取的特征更具有具体特征,如纹理等。更关注训练的某一类的特定细节)

  3. 使用其他人开源的 pretrained models
    Caffe library: 开源pretrained models
    大佬 Ross Wightman 整理的开源pretrained models
    ONNX open neural network exchange

  • 什么时候用迁移学习?
    最重要的两个因素: 新数据集的大小(考虑过拟合,是否fine-tuning)、和原数据集的相似度(类别、图片内容)(是否fine-tuning higher layers)。

可能的四种情况:

  1. 新数据集较小,和原数据集相似。
    数据集小可能出现过拟合,相似则希望用到原模型的高层特征。在原基础上训练一个线性分类器。
  2. 新数据集较大,和原数据集相似。
    同上,且不用担心过拟合。
  3. 新数据集较小,和原数据集不相似。
    为了防止过拟合,最好只训练新的SVM;又数据集不相似,高层的特征不匹配,综合来说,在原模型的后几层早一些训练SVM。(不仅仅训练最后一层)
  4. 新数据集较大,和原数据集不相似。
    在原来模型基础上,重新 fine-tuning 整个模型参数。

实际建议: 在应用pretrained models 时,learning rate 不建议太大,因为是在原来基础上进行微调。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值