什么是fine-tuning
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相关推荐
- pytorch深度学习-微调(fine tuning)
微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户.一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然 ...
- pretraining+fine tuning
few shotlearning简单实现方法:在大规模数据做预训练模型,然后在小规模suport set上做fine tuning.方法简单准确率高. 基础数学知识: cos函数可以判断两个向量的相似 ...
- 如何fine tuning
先看一个示例 keras入门 -在预训练好网络模型上进行fine-tune https://blog.csdn.net/hnu2012/article/details/72179437 我们的方法是这 ...
- 计算机视觉之迁移学习中的微调(fine tuning)
现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...
- Bert模型 fine tuning 代码run_squad.py学习
文章目录 关于run_squad.py 分模块学习 SquadExample InputFeatures create_model model_fn_builder input_fn_builder ...
- 清华大学刘知远组:基于Prompt Tuning对低维本征任务子空间进行探索
©作者 | 曾伟豪 学校 | 北京邮电大学 研究方向 | 对话摘要生成 论文标题: Exploring Low-dimensional Intrinsic Task Subspace via Prom ...
- The Power of Scale for Parameter-Efficient Prompt Tuning及prefix tuning与prompt tuning的区别
1.本文贡献 (1)提出prompt tuning,并在大型语言模型领域展示其与model tuning(fine tuning)的竞争力: (2)减少了许多设计选择,显示质量和鲁棒性随着规模的增加而 ...
- Delta tuning(只抓核心)
高效的参数调整方法汇总 parameter-efficient transfer learning method:意思是只需要调整一小部分的参数就可以达到微调的效果. 现有的常见的参数微调方法: (1 ...
- Prompt Pre-training:迈向更强大的Parameter-Efficient Prompt Tuning
©PaperWeekly 原创 · 作者 | 李国趸 单位 | 浙江大学硕士生 研究方向 | 少样本学习 前言 从 prompt learning 的发展来看,一开始关注的是将任务建模成和预训练相近的 ...
- 命名实体识别NER遗留问题----模型构建
深度学习模型预测实质:训练保存的模型里面参数 整个只有一套参数 不仅保存了训练数据全部的正确信息,而且同字多义的情况下通过其同行的词来判断,虽然参数都是一套但是因为输入的值不同导致计算的结果不同 导致 ...
最新文章
- 使用 NSUserDefaults 存储字典的一个坑
- android 数据结构详情,Android原生的数据结构
- eclipse导出jar包
- Py之pandas:利用isin函数对dataframe格式数据按照多个字段的条件筛选
- php 匹配div正则表达式,Php正则表达式匹配div
- nginx模块nginx_upstream_check_module来检查后端服务器的健康情况
- Python: 日志库logging总结
- 全球主要气象气候研究部门及其共享数据集介绍
- bigbluebutton视频直播服务器调用接口
- Linux终端欢迎界面
- 求解N的N次方的个位数
- matlab批量下载网页文件
- xmind打开文件报错
- 谷歌扩展程序设置ajax请求允许跨域(极少人知道的解决方案)
- 用 ListBox 和 DataBinding 显示列表数据 (木野狐译) 1
- LumaQQ.NET使用的一些方法
- 【Spark】广播变量和累加器
- matlab怎么停止运行命令,MATLAB如何使用pause函数暂停程序运行
- chart.js使用学习——雷达图
- 求心理阴影的面积 (题目出自:陈越-浙江大学)