在imagenet预训模型上进行finetune
所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中。
fine tune的好处在于不用完全重新训练模型,从而提高效率,因为一般新训练模型准确率都会从很低的值开始慢慢上升,但是fine tune能够让我们在比较少的迭代次数之后得到一个比较好的效果。在数据量不是很大的情况下,fine tune会是一个比较好的选择。但是如果你希望定义自己的网络结构的话,就需要从头开始了。(其实finetune和增量学习非常相近,方法类似)
这里我用使用爬虫抓取的6类图片对imagenet官网上发布的预训模型(bvlc_reference_caffenet.caffemodel)进行finetune:
过程与训练.caffemodel时差不多,只有几处差异需要注意一下:
(1)solver.prototxt中的一些参数可能要适当进行一些修改;
(2)在train_val.prototxt和deploy.prototxt中的网络结构中,因为我们全连接层之前的层的初始权重依然使用预训模型的初始权重,但最后的全连接层需要重新训练,其中num_output由1000改为6,最后一层的名字也要重新命名,比如:fc8_flicker;
(3)train.sh修改如下:
1 | ./build/tools/caffe train -solver=examples/money_test/fine_tune/solver.prototxt -weights=models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel |
这里还要注意一点: 在进行finetune时再次添加的样本的label值必须从0开始且连续(假如我第4类识别不太好,我试过在finetune的时候如果仅仅添加第四类,label等于4,则训练时loss一直在异常跳动)
所以这里有一个问题:
有没有一种方法使我能在finetune或者增量学习时只训练某一类(label不等于0)样本。(假如我的预训模型对那一类的识别效果不行)???请知道的人提供建议,不胜感激!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架