深度学习--迁移学习

动机:在一个任务上训练好的模型,能在别的地方能用

方法:

        1.训练好的模型,做成一个特征抽取的模块;

        2.在一个相关的任务上训练一个模型,到另一个任务上直接使用

        3.在新的任务上进行一点点微调,更好的在另一个任务上使用

目的:利用别人标号的数据,将一些学到的东西迁移过来

转移知识的方法

        1.用的最多的是用预训练好的模型

对于一个大的神经网络,可以分成两块,一块为编码器,一块为解码器。编码器就是特征提取的,编码器把原始图片的信息转化为特征,解码器做一个简单的线性分类器,就是做一些简单的标号或者是其他决策。具体流程:

下面这些卷积层可以当成编码器,上面输出的作为解码器,解码器把卷积层的特征分类了一下,输出这是一只猫

在一个比较大的数据集上训练好的模型,这个模型由于训练的数据集较大,在解决其他问题上也有一定能力。在编码器部分是有一定用处的。

微调:

        在新的任务上构建新的模型,但是构建的模型架构要和与训练模型的架构一样。新模型的卷积层(编码器)在初始化权重的时候不是用的随机,而是直接把预训练好的那些权重复制过来,最后一层解码器还是用的随机初始。

假如在一个数据集上做好预训练模型了,在新的任务中,模型的卷积层复制过去就好,调整的是最上面的决策层,只要告诉模型怎么做决策就好了,下面特征提取的任务预训练任务已经做好了,最后根据误差调整一下卷积层。

要限制搜索空间:蓝色的点是泛化误差最小的点,而红色的点是数据集上训练误差最小的点,蓝色的才是我们最终想要的,所以在这个数据集上训练过多并不是一件好事,所以叫做微调

把最底层固定住frozen layers:因为在模型中,卷积层越往上学到的东西越全局化,比如说从一点的手指纹路最终学习到整只手。一般来说,下面这些层学到的是底层的特征,跟上面的层没有太多的关系,也许换一个数据集来说,这些边边角角的泛化性也是非常好的。卷积层越往上就越向语义空间靠近。对于一个神经网络来说,它是慢慢学习,从底层逐渐向给定的标号靠近,是一个平滑的过程。我们可以在上面的那些靠近语义的层次上做调整,而下面比较底层的就不动了,固定住,学习率变成0。

找到预训练模型:

1. http://tfhub.dev/        Tensorflow Hub

2.http://github.com/rwightman/pytorch-image-models        Timm个人做的模型

微调 只是改变了初始的值,不会像随机值那样子要训练很多次。会让你训练过程缩短,但是不一定会提升精度。

总结:一般我们会在大数据集上训练模型,在新的任务上我们把新的模型设置为预训练模型的初始权权重。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值