2

我在网上看到很多关于如何微调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 等进行微调时应该设置多少层来冻结。谁能给我有关如何微调这些模型的建议?尤其是人们在对这些模型进行微调时会冻结多少层?

4

1 回答 1

0

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


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

  • 一系列卷积层
  • 紧接着是几个密集的层

这几个密集层就是 keras 所说top的。(如在include_top参数中)。

通常,这种微调只发生在最后的密集层中。您让卷积层(理解图像和定位特征)不变地完成它们的工作,并创建适合您个人课程的顶部部分。

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

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

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

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

于 2017-10-11T17:36:17.510 回答