预训练模型&迁移学习
预训练模型&迁移学习
预训练模型概念
预训练模型是一个已经训练好的保存下来的网络
该网络以前在一个大型的数据集上进行了训练(如图像相关的网络在ImageNet数据上进行了训练)
做用
能够用来开箱即用的解决方案
能够将预训练模型当作特征提取装置来使用,用于迁移学习
当预训练模型学习到的特征容易泛化的时候,迁移学习才能获得比较有效的使用
迁移学习
先在一个基础的数据集上进行任务的训练,生成一个基础网络
而后将学习到的特征从新进行调整或迁移到另外一个目标网络上,用来训练目标任务的数据集。
迁移学习是一种优化方法,节省时间,或者能得到更好的性能的捷径
迁移学习在什么状况下有效
- 当预训练模型(预训练获取到的特征)是容易泛化的,那么迁移学习就能有效的进行
须要微调来完成迁移学习
案例
采用预训练模型,这样我不须要从新训练个人整个结构,只须要针对其中的几层进行训练便可。
我采用了在ImageNet数据集上预先训练好的VGG16模型,这个模型能够在Keras库中找到。
只将softmax层的1000个输出改成16个,从而适应咱们这个问题的情景
随后从新训练了dense layer
结构的准确率可以达到70%
只须要针对dense layer进行训练,所需时间基本能够忽略
如何使用预训练模型
场景一:数据集小,数据类似度高(与pre-trained model的训练数据相比而言)
- 不须要从新训练模型。咱们只须要将输出层改制成符合问题情境下的结构就好
- 好比说咱们使用在ImageNet上训练的模型来辨认一组新照片中的小猫小狗,咱们只须要把dense layer和最终softmax layer的输出从1000个类别改成2个类别(猫,狗)
场景二:数据集小,数据类似度不高
- 能够冻结预训练模型中的前k个层中的权重,而后从新训练后面的n-k个层
- 由于数据的类似度不高,从新训练的过程就变得很是关键
- 新数据集大小的不足,则是经过冻结预训练模型的前k层进行弥补
场景三:数据集大,数据类似度不高
- 由于实际数据与预训练模型的训练数据之间存在很大差别,采用预训练模型将不会是一种高效的方式
- 最好的方法仍是将预处理模型中的权重全都初始化后在新数据集的基础上重头开始训练
场景四:数据集大,数据类似度高
- 保持模型原有的结构和初始权重不变,随后在新数据集的基础上从新训练
从上面的四个场景能够看出,如何使用预训练模型由新旧数据集的大小和类似度来决定
缺点
一些预训练模型可能会比较大
优势
更高的起点:源模型中的初始性能比其余方法要高
更大的坡度:在训练源模型期间性能的提升速度比其余状况下更陡峭
更好的渐近线:训练好的模型的融合性能要好于其余状况
能够自定义预训练模型并将其专门用于某些问题
模型微调的方法
特征提取
- 将预训练模型当作特征提取来使用
- 将输出层去掉,将剩下的整个网络当作一个特征提取器,从而应用到新的数据集中
采用预训练模型的结构
- 预训练模型的模型结构保持不变
- 将全部的权重从新随机初始化
- 根据本身的数据集进行训练
训练特定的层,冻结其余层
- 对预训练模型进行部分的训练
- 将模型起始的一些层的权重锁定,保持不变
- 从新训练未锁定的层,获得新的权重

欢迎关注本站公众号,获取更多信息