我在互联网上看到了许多关于如何微调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 .etc进行微调时,我不知道应该冻结多少层。有人能给我关于如何微调这些模型的建议吗?特别是当人们对这些模型进行微调时,会冻结多少层呢?
发布于 2017-10-11 17:36:17
这很奇怪..。VGG16模型共有23层.(https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py)
所有这些模型都有类似的结构:
这几个密集的层就是keras所称的top。(如include_top参数中的那样)。
通常,这种微调只发生在最后的密集层。您让卷积层(它们理解图像和定位功能)完成它们的工作,并创建适合您的个人类的顶级部分。
人们常常创造他们自己的顶端部分,因为他们没有完全相同的课程,原来的模型被训练。所以他们调整了最后一部分,只训练了最后一部分。
所以,使用include_top=False创建一个模型,然后将其完全冻结。
现在,您添加您自己的密集层,并留下这些可训练。
这是最常见的适应这些模式。
对于其他类型的微调,可能没有明确的规则。
https://stackoverflow.com/questions/46693776
复制相似问题