【问题标题】:Find top layers for a fine-tuned model查找微调模型的顶层
【发布时间】:2020-06-28 00:57:44
【问题描述】:

我想使用基于 MobileNetV2(在 Keras 上预训练)的微调模型。但我需要添加顶层以便将我的图像分为 2 个类。我想知道如何选择我需要的层的“架构”? 在某些示例中,人们使用 SVM 分类器或一系列具有特定数量神经元的 Dense 层作为顶层。

以下代码(默认情况下),它可以工作:

        self.base_model = base_model
        x = self.base_model.output
        x = GlobalAveragePooling2D()(x)
        x = Dense(1024, activation='relu')(x)
        predictions = Dense(2, activation='softmax')(x)

是否有任何方法可以找到最佳解决方案?

【问题讨论】:

  • 我认为您的解决方案很棒,真正的力量在于预训练模型。 2 或 3 个 Dense 层,就像你做的那样,应该很棒。
  • 它们是我必须选择的神经元数量的标准吗? (减少数量,增加,...)
  • 这是参数调优,一定要测试看看。 Chompakorn 的回答实际上比我的评论要好。

标签: keras deep-learning neural-network conv-neural-network


【解决方案1】:

我会推荐DropoutBatchNormalization。 Dense 很容易过拟合,因为它在一个层中有太多的参数。两层都可以很好地规范模型。 GlobalAveragePooling2D 是一个不错的选择,因为它本身也像正则化器一样。

我还建议,对于二元分类问题,您可以将输出层更改为Dense(1, activation='sigmoid') 以仅预测 P(class1),您可以通过 1-P(class1) 计算 P(class2) .在这种情况下,您应该使用的损失将是 binary_crossentropy 而不是 categorical_crossentropy

【讨论】:

  • 感谢您的回答,您对设置 Dropout 的参数有何建议?
  • 我是否使用 GridSearch 并选择最好的?
  • 像你说的改变输出层真的会提高我的神经网络的准确性吗?你能告诉我为什么吗?
  • 这不是保证改进。首先,你需要知道调整超参数对于深度学习来说是非常困难的,大量的研究人员正在研究这个问题。因此,在大多数情况下,这是一个反复试验的问题。但是,您可以寻找与您相关的其他作品并相应地调整他们的模型,因为他们的模型已经过试验并给出了很好的结果。
  • 做 GridSearch 是寻找最佳超参数的方法之一,甚至谷歌也这样做:)(例如检查 EfficientNet)。但是,您应该记住,您监控的是最佳验证性能,而不是训练性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2016-08-18
  • 2016-09-24
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多