如何正确使用迁移学习

在使用迁移学习之前,有两点需要特别注意的地方:

  • 你的数据的尺寸大小
  • 你的数据和预训练好网络结构数据(典型的比如说是ImageNet)的相似程度

关注上面的问题可以帮助我们确定何种数据迁移策略。我们以表格的形式来展示一下。

  相似数据 不同数据
小数据 使用全连接进行特征提取+分类 使用高层卷积特征提取+分类
大数据 可以尝试微调网络
也可以尝试从头训练自己的网络
微调网络可能有效果也可能没有效果
可以尝试从头训练自己的网络
原始样本数据是小数据并且和要迁移模型数据相似

因为数据较小,所以很有可能没有办法从头获取CNN特征而不发生过拟合,微调网络也有可能会遇到这样的问题。

原始数据和预训练模型的数据很像,用来进行特征提取通常是一个不错的办法。然后使用一个简单的机器学习分类器对这些特征进行分类。通常建议可以从更深的网络结构中(更高的层)提取特征,因为这些特征更丰富,更能代表中原始数据中学到的模式。

原始样本数据是大数据并且和要迁移模型的数据相似

对于大数据,微调网络通常不会发生过拟合现象。你也可以尝试自己从头训练一个模型(至少这个想法值得做实验尝试一下)。因为原始样本数据和要迁移模型数据十分相似,那么迁移的预训练模型可能已经有了足够好的特征,因此使用微调网络会很不错。

原始样本是小数据并且和要迁移模型数据不同

这是最糟糕的一种情况。
为了防止过拟合,我们不可能从新训练模型。因为数据集不同,提取特征的话,我们也要使用预训练模型的较低的层来提取特征。
我们应该知道的是,对于网络结构而言,更深的网络(更高的层)通常有更好的区分度,更符合训练数据本身。因此,对于现在这种情况,我们一定要从低层网络结构中提取特征。

原始样本是大数据并且和要迁移模型数据不同

对于这种情况,既然有足够的数据,从头训练一个网络可能应该是首要选择的点。然而,像是从ImageNet这样的数据集中预训练的模型仍有很强的参考意义,即使这两个数据看起来没有什么相关性。进行微调网络迁移学习值得一试。可以作为一个基线评估,看看和从头训练网络相比,哪个效果更好。

发布了189 篇原创文章 · 获赞 233 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/Einstellung/article/details/93724697