如何使用resnet50模型进行微调?

时间:2017-10-11 16:58:14

标签: machine-learning neural-network deep-learning keras resnet

我在互联网上看到过很多关于如何微调VGG16和InceptionV3的例子。例如,有些人会在微调VGG16时将前25个图层设置为冻结。对于InceptionV3,前172个图层将被冻结。但是resnet怎么样?当我们进行微调时,我们将冻结基本模型的某些层,如下所示:

from keras.applications.resnet50 import ResNet50

base_model = ResNet50(include_top=False, weights="imagenet", input_shape=(input_dim, input_dim, channels))

..............

for layer in base_model.layers[:frozen_layers]:
    layer.trainable = False

那么我应该如何设置frozen_layers?实际上,当我使用VGG16,VGG19,ResNet50,InceptionV3等进行微调时,我不知道应该设置多少层冻结。谁能给我一些关于如何微调这些模型的建议?特别是当用这些模型进行微调时,人们会冻结多少层?

1 个答案:

答案 0 :(得分:0)

这很奇怪.... VGG16模型总共有23层...(https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py

所有这些模型都有类似的结构:

  • 一系列卷积层
  • 后面是几个密集的层

keras称之为top的几个密集层。 (与include_top参数中一样)。

通常,这种微调只发生在最后的密集层中。你让卷积层(理解图像和定位特征)不做任何改变,并创建适合你个人课程的最佳部分。

人们经常创建他们自己的顶级部分,因为他们没有与原始模型训练的完全相同的类。因此,他们调整最后的部分,并只训练最后的部分。

因此,您使用include_top=False创建模型,然后将其完全冻结 现在你添加自己的密集层并留下这些可训练的层。

这是这些模型中最常见的改编。

对于其他类型的微调,可能没有明确的规则。