• 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不同了,又要报错。

  • 相关阅读:
    C/C++程序内存泄漏检测
    linux下的内存管理
    Linker Script 链接器脚本
    linux内核进程调度以及定时器实现机制
    嵌入式软件设计中查找缺陷的几个技巧
    winCE DEBUGZONE
    程序员三个境界
    EJB初识(通熟易懂)
    JVM/JDK/JRE/IDE—区别(很经典)
    dubbo初识(一)Dubbo架构设计详解
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6763869.html
Copyright © 2020-2023  润新知