zoukankan      html  css  js  c++  java
  • fine-tuning

    fine-tuning是微调的意思,是用别人训练好的模型(即pre-trained model),加上我们自己的数据,来训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中。

    一般来说我们自己需要做的方向,比如在一些特定的领域的识别分类中,我们很难拿到大量的数据。因为像在ImageNet上毕竟是一个千万级的图像数据库,通常我们可能只能拿到几千张或者几万张某一特定领域的图像,比如识别衣服啊、标志啊、生物种类等等。在这种情况下重新训练一个新的网络是比较复杂的,而且参数不好调整,数据量也不够,因此fine-tuning微调就是一个比较理想的选择。

    如果想网络中某几层参数不变,可以设置对应learning rate为0让这些层的参数不学习

    关于fine-tuning两个比较好的博客:

    http://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html

    http://www.cnblogs.com/alexcai/p/5469478.html

    知乎上的一个问题:

    https://www.zhihu.com/question/35754716

    实践中总结:对于fine-tuning,网络中层的名字一模一样的会复用参数,名字不一样的会去做初始化。

    对于相同的名字的层,如果输入输出与fine-tuning的不一样,就会报如下错误:

    很明显,报错是shape不一样。名字相同,会认为是同一个层,但实际的输入输出又不同,即参数个数都不相同,就会报错。

    对于一个网络,fine-tuning的类是21类,你的类是2类,但你的网络结构与fine-tuning的几乎一模一样,只是输出的类别数目不同,这个时候你可以保持前面几层不变,改变最后一两层的输入输出,但这时也必须同时改已经修改了输入输出个数的层的名字。名字不相同了,就不会赋值而去初始化。如果不改,相同名字的层的shape不同了,又要报错。

  • 相关阅读:
    让我偷偷的告诉你:运维加薪的杀手锏是啥?
    网站页面优化必然趋势—WebP 图片!
    如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
    网页增重不可控?试试 OneAPM Cloud Test
    提高 ASP.NET Web 应用性能的 24 种方法和技巧
    OneAlert 入门(三)——事件分析
    Cloud Insight 客户案例-晨芯时代科技有限公司
    Java开发快速上手
    微信小程序快速开发上手
    微信小程序快速开发上手
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6763869.html
Copyright © 2011-2022 走看看