【问题标题】:how to do fine-tuning with resnet50 model?如何使用 resnet50 模型进行微调?
【发布时间】:2018-03-23 10:57:45
【问题描述】:

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

【问题讨论】:

  • 我也听说,如果我们只训练自己的密集层,这叫做迁移学习。如果我们以较小的学习率训练 base_model 中的一些层(如 resnet、vgg 等),则称为微调。我知道卷积块有一些特殊的含义,那么如何冻结基础模型中的层以进行微调?

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


【解决方案1】:

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


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

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

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

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

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

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

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

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

【讨论】:

  • 抱歉 vgg 的错误。我的意思是人们会冻结除最后一个卷积块之外的 vgg 网络,以便更好地适应自己的数据,然后以较小的学习率调整最后一个卷积块以及密集层,如下所示:vgg16 fine-tuning
猜你喜欢
  • 2017-10-07
  • 2021-01-29
  • 2021-11-21
  • 2017-12-30
  • 2021-06-16
  • 2020-12-20
  • 2022-08-20
  • 2021-03-27
相关资源
最近更新 更多