https://www.julyedu.com/question/big/kp_id/26/ques_id/2137)

在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器

  • 以下是常见的两类迁移学习场景:

1 卷积网络当做特征提取器。使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AlexNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、Softmax等)来分类图像。

2 Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(generic features)(例如边缘检测,色彩检测),这些特征对许多任务都有用。后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要Fine-tuning后面的层

  • 预训练模型

在ImageNet上训练一个网络,即使使用多GPU也要花费很长时间。因此人们通常共享他们预训练好的网络,这样有利于其他人再去使用。例如,Caffe有预训练好的网络地址Model Zoo。

  • 何时以及如何Fine-tune

决定如何使用迁移学习的因素有很多,这是最重要的只有两个:新数据集的大小、以及新数据和原数据集的相似程度。有一点一定记住:网络前几层学到的是通用特征,后面几层学到的是与类别相关的特征。这里有使用的四个场景

1、新数据集比较小且和原数据集相似。因为新数据集比较小,如果fine-tune可能会过拟合;又因为新旧数据集类似,我们期望他们高层特征类似,可以使用预训练网络当做特征提取器,用提取的特征训练线性分类器。

2、新数据集大且和原数据集相似。因为新数据集足够大,可以fine-tune整个网络。

3、新数据集小且和原数据集不相似。新数据集小,最好不要fine-tune,和原数据集不类似,最好也不使用高层特征。这时可使用前面层的特征来训练SVM分类器。

4、新数据集大且和原数据集不相似。因为新数据集足够大,可以重新训练。但是实践中fine-tune预训练模型还是有益的。新数据集足够大,可以fine-tine整个网络。

  • 实践建议
  • 预训练模型的限制
    使用预训练模型,受限于其网络架构。例如,你不能随意从预训练模型取出卷积层。但是因为参数共享,可以输入任意大小图像;卷积层和池化层对输入数据大小没有要求(只要步长stride fit),其输出大小和属于大小相关;全连接层对输入大小没有要求,输出大小固定。
  • 学习率的限制
    与重新训练相比,fine-tune要使用更小的学习率。因为训练好的网络模型权重已经平滑,我们不希望太快扭曲(distort)它们(尤其是当随机初始化线性分类器来分类预训练模型提取的特征时)。

更多参考

1 CNN Features off-the-shelf: an Astounding Baseline for Recognition基于ImageNet预训练模型提取特征训练SVM分类器,陈述了几个最优结果。

2 DeCAF2013年报告了类似发现。这篇论文使用的框架接口为Python,实现是caffe的c++。

3 How transferable are features in deep neural networks?详细介绍了迁移学习,包括一些大学发现的layer co-adaptations。

什么是fine-tuning相关推荐

  1. pytorch深度学习-微调(fine tuning)

    微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户.一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然 ...

  2. pretraining+fine tuning

    few shotlearning简单实现方法:在大规模数据做预训练模型,然后在小规模suport set上做fine tuning.方法简单准确率高. 基础数学知识: cos函数可以判断两个向量的相似 ...

  3. 如何fine tuning

    先看一个示例 keras入门 -在预训练好网络模型上进行fine-tune https://blog.csdn.net/hnu2012/article/details/72179437 我们的方法是这 ...

  4. 计算机视觉之迁移学习中的微调(fine tuning)

    现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...

  5. Bert模型 fine tuning 代码run_squad.py学习

    文章目录 关于run_squad.py 分模块学习 SquadExample InputFeatures create_model model_fn_builder input_fn_builder ...

  6. 清华大学刘知远组:基于Prompt Tuning对低维本征任务子空间进行探索

    ©作者 | 曾伟豪 学校 | 北京邮电大学 研究方向 | 对话摘要生成 论文标题: Exploring Low-dimensional Intrinsic Task Subspace via Prom ...

  7. The Power of Scale for Parameter-Efficient Prompt Tuning及prefix tuning与prompt tuning的区别

    1.本文贡献 (1)提出prompt tuning,并在大型语言模型领域展示其与model tuning(fine tuning)的竞争力: (2)减少了许多设计选择,显示质量和鲁棒性随着规模的增加而 ...

  8. Delta tuning(只抓核心)

    高效的参数调整方法汇总 parameter-efficient transfer learning method:意思是只需要调整一小部分的参数就可以达到微调的效果. 现有的常见的参数微调方法: (1 ...

  9. Prompt Pre-training:迈向更强大的Parameter-Efficient Prompt Tuning

    ©PaperWeekly 原创 · 作者 | 李国趸 单位 | 浙江大学硕士生 研究方向 | 少样本学习 前言 从 prompt learning 的发展来看,一开始关注的是将任务建模成和预训练相近的 ...

  10. 命名实体识别NER遗留问题----模型构建

    深度学习模型预测实质:训练保存的模型里面参数 整个只有一套参数 不仅保存了训练数据全部的正确信息,而且同字多义的情况下通过其同行的词来判断,虽然参数都是一套但是因为输入的值不同导致计算的结果不同 导致 ...

最新文章

  1. 使用 NSUserDefaults 存储字典的一个坑
  2. android 数据结构详情,Android原生的数据结构
  3. eclipse导出jar包
  4. Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选
  5. php 匹配div正则表达式,Php正则表达式匹配div
  6. nginx模块nginx_upstream_check_module来检查后端服务器的健康情况
  7. Python: 日志库logging总结
  8. 全球主要气象气候研究部门及其共享数据集介绍
  9. bigbluebutton视频直播服务器调用接口
  10. Linux终端欢迎界面
  11. 求解N的N次方的个位数
  12. matlab批量下载网页文件
  13. xmind打开文件报错
  14. 谷歌扩展程序设置ajax请求允许跨域(极少人知道的解决方案)
  15. 用 ListBox 和 DataBinding 显示列表数据 (木野狐译) 1
  16. LumaQQ.NET使用的一些方法
  17. 【Spark】广播变量和累加器
  18. matlab怎么停止运行命令,MATLAB如何使用pause函数暂停程序运行
  19. chart.js使用学习——雷达图
  20. 求心理阴影的面积 (题目出自:陈越-浙江大学)

热门文章

  1. GUID基本概念以及C#、SqlServer中GUID基本用法
  2. 设计模式(三)单实例模式
  3. 设计可扩展的应用程序
  4. SPS技术体系之一-----程序文件和IIS配置
  5. 软件测试用例设计方法-判定表法
  6. vue比php的优势,vue.js的优势是什么
  7. Python基本操作(二)注释、分隔
  8. 你必须学会HTML和CSS的9大理由,让你在以后的工作中更香
  9. mysql sql执行cmd命令行_命令行执行MySQL的sql文件
  10. substance design graph 不显示_每天1分钟背单词 词根 graph