当前位置:   article > 正文

迁移学习(Transfering Learning)_简单图片迁移学习过拟合

简单图片迁移学习过拟合

        假设你要做一个计算机视觉的任务,相比于从头开始训练权重,或者说从随机初始化权重开始训练,如果你下载别人已经训练好的网络结构的权重,这可以帮助你有更快的进展。通过预训练,然后转换到你感兴趣的任务上。

        比如说你要建立一个猫咪检测器,检测猫咪的名字。比如说有一只猫叫做Tigger,另一只猫叫做Misty,还有一种情况就是,两者都不是。所以你现在有一个三分类的问题,图片里的猫是Tigger还是Misty,或者都不是。假如说你没有Tigger和Misty的大量图片,所以你的训练集很小,怎么办?建议的办法就是,从网上下载一些开源的神经网络架构的实现,包括代码和网络架构权重信息。

        举个例子,ImageNet数据集,它有1000个不同的类别,因此这个网络会有一个softmax单元,它可以输出1000个可能的类别之一。

        为了将该模型迁移到你的任务上,你可以选择去掉最后的softmax层,保留前面的所有层,冻结其参数,然后通过修改自己的softmax层,用来输出T M N三个类别。

        另一个技巧就是,由于前面的层都冻结了,相当于一个固定的函数,不需要改变。所以可以取输入图像X,然后把它映射到冻结层最后一层的激活函数上,这在某种意义上能够加速训练。

        假如你有一个比较大的数据集,也许你有大量的Tigger和Misty的照片,那么在这种情况下,你应该冻结更少的层,如下图所示。 只冻结前面的层,训练后面的层并修改softmax单元。

       

         一般而言,数据越大,那么你可以训练的层就越多。理想情况下,如果你有大量的数据,那么应该做的就是利用开源的网络和权重,把这些权重当作初始化,然后去修改并训练整个网络。

        什么fine-tuning?Fine-tuning是什么意思? - 知乎

迁移学习(Transfer learning) 顾名思义就是把已训练好的模型(预训练模型)参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。

其中,实现迁移学习有以下三种手段:

  1. Transfer Learning:冻结预训练模型的全部卷积层,只训练自己定制的全连接层。
  2. Extract Feature Vector:先计算出预训练模型的卷积层对所有训练和测试数据的特征向量,然后抛开预训练模型,只训练自己定制的简配版全连接网络。
  3. Fine-tuning:冻结预训练模型的部分卷积层(通常是靠近输入的多数卷积层,因为这些层保留了大量底层信息)甚至不冻结任何网络层,训练剩下的卷积层(通常是靠近输出的部分卷积层)和全连接层

Fine-tuning原理

Fine-tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的若干层的参数,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择。

Fine-tuning意义

  1. 站在巨人的肩膀上:前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
  2. 训练成本可以很低:如果采用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用CPU都完全无压力,没有深度学习机器也可以做。
  3. 适用于小数据集:对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/532121?site
推荐阅读
相关标签
  

闽ICP备14008679号