根据前面所做的笔记,卷积神经网络随随便便就有那么多参数,如果我训练集过少的话,会造成过拟合的问题。那如何在训练数据过少的情况下来使我的效果变得好呢?

  举个例子,比如说我区分猫狗的训练数据有10万个,利用这10玩个数据我训练出来的效果特别好。但我区分老虎和狮子的训练集只有1万个,我能不能达到像区分猫狗那样的性能呢?答案是可以的。

  我们都是随机初始化参数和权重,利用这些数据的更新来使效果达到最好。那我现在我不随机初始化参数,直接把区分猫狗训练完后数据拿过来作为我区分老虎和狮子的初始化参数,在这个基础上进行精修,这些数据其实已经很鲁棒了,它至少可以区分猫和狗,可能它训练出来的数据对毛发这些特征都已经见过了,这个时候我只要进一步分类老虎和狮子的其他特征就好了,这就是站在巨人的肩膀上继续前行,这种方式叫做迁移学习,把猫和狗的训练叫做Pretrained models.

  那如何去运用迁移学习呢?

  卷积神经网络之迁移学习

  如上图所示,左边的图是原任务的图像,也就是区分猫狗轮船(由上图可知因为最后的输出有三类)的图像,这个时候我只需要把最后一层去掉,这个时候我也就把最后一层和倒数第二层之间的参数踢掉了,然后去掉之后增加新任务的最后一层,也就是区分老虎和狮子的输出层(两类),那这个时候新组成的结构最后一层和倒数第二层之间的参数要随机初始化了,其他的参数不用变了就。这就是迁移学习的步骤。

  那什么时候用迁移学习呢?第一,当目标任务和原任务比较接近的时候用迁移学习。第二,当你可用的数据量较少的情况下用迁移学习迁移学习最关键的一点是在完成原任务的基础上,重新设置一个较小的学习率,训练新的任务。