赞
踩
假设你要做一个计算机视觉的任务,相比于从头开始训练权重,或者说从随机初始化权重开始训练,如果你下载别人已经训练好的网络结构的权重,这可以帮助你有更快的进展。通过预训练,然后转换到你感兴趣的任务上。
比如说你要建立一个猫咪检测器,检测猫咪的名字。比如说有一只猫叫做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) 顾名思义就是把已训练好的模型(预训练模型)参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。
其中,实现迁移学习有以下三种手段:
Fine-tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的若干层的参数,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。