为什么要使用预训练模型

2022-09-28 09:19:55

当然是因为自己从头训练(所有权重随机初始化)太费时费力了

当我们用卷积神经网络训练自己的数据得到图片分类器时,会发现网络大多数结构包括convolution layers, pooling layers等是用来提取图片特征的,在这些layers的开始部分,提取的特征是相当泛化的,比如说边缘特征、色块特征。越到后面的layers,提取的特征越具有特殊性,例如ImageNet 数据集包含了许多不同品种的狗,到后面的layers便具备了狗的一些共有特征。

因此我们通常会将别人训练过的模型拿来用(用这些模型的权重来初始化),通常有两种用法。第一,前面的layers全部保留,只训练最后的分类器(SVM,Softmax等),以使用caffe为例,具体做法就是修改train的prototxt文件里面最后一个fc层的名字和输出数。第二,保留一部分layers(当然也可以不保留),然后重新训练(此时有back propagation的过程而第一没有)。

如果你觉得别人的模型不可靠,毕竟这些数据集的类多为生活中自然中的物体,与我们具体要做的分类的物体可能存在较大的差异,那便自己从头训练一下(条件:足够多的数据、性能较好的GPU、充足的时间),网络模型依然可以使用别人的,毕竟是验证过提取特征效果很好的模型。

最后放上caffe的model zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo

  • 作者:Dex_
  • 原文链接:https://blog.csdn.net/sinat_17745963/article/details/72901954
    更新时间:2022-09-28 09:19:55