关于对pre-trained模型的使用和理解

现在有很多在Imagenet等数据集上训练的很好的模型,当我们使用相同的网络结构时可以直接拿来调用,而不必花很多时间你去从头造轮子,毕竟这些训练好的模型已经是各个数据集的老死机了。

下面我将我自己对与训练模型的使用场景做一个简单的理解:

1. 当数据集小的时候:

A、相似度高:如果训练数据和pretrained model所用的数据相似度较高的时候,我们不需要从头造轮子,只需要修改最后的输出的softmax即可,采用已经训练好的结构来提取特征。

B、相似度低:如果训练数据和pretrained model所用的数据相似度较低,假设网络一共有n层,我们可以冻结预训练模型中的前k个层中的权重,然后重新训练后面的n-k个层,并修改最后一层的分类器的输出类即可。因为数据的相似度不高,重新训练的过程就变得非常关键。而新数据集大小的不足,则是通过冻结预训练模型的前k层进行弥补。(相似度不高的时候重新训练是很有必要的,而冻结前K层的原因是为了弥补训练数据量不充足,当然了数据量不足可以采取数据增强方法,比如:对称,旋转,随机切,扭曲等等)

2.当数据集大的时候:

A、相似度高:这个是非常好也非常难得的情况,此时只要采用pretrained模型不需要改变任何参数即可,即保持模型原有的结构和初始权重不变,随后在新数据集的基础上重新训练。

B、相似度低:因为我们有一个很大的数据集,所以神经网络的训练过程将会比较有效率。然而,因为实际数据与预训练模型的训练数据之间存在很大差异,采用预训练模型将不会是一种高效的方式。因此最好的方法还是将预处理模型中的权重全都初始化后在新数据集的基础上重头开始训练。

猜你喜欢

转载自blog.csdn.net/gbyy42299/article/details/78977826