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

  • 相关阅读:
    计算机网络技术-IOS和VRP 学习笔记
    计算机网络技术-OSI和TCP/IP学习笔记
    软件安装-Typora安装
    python 根据车牌信息,分析出各省的车牌持有量
    python 判断一个三位数是不是水仙花数
    python基础 day7 基础数据类型补充、编码的进一步认识
    浅谈对深浅copy的个人理解(小白的理解,轻喷)
    python基础 day6 id和is、代码块、集合、深浅拷贝
    python基础 day5 字典
    python基础 day4 列表、元组、range
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6763869.html
Copyright © 2011-2022 走看看