使用迁移学习时模型不学习

数据挖掘 深度学习 神经网络 迁移学习 卷积神经网络
2022-02-12 19:13:49

我正在从事关于图像分类(两个类)的个人项目,并试图了解 MobileNet v2 结构的性能。虽然在第一个 epoch 之后训练的训练准确度已经很高,之后继续增加。然而,验证准确率似乎永远停留在 50% 左右。

在此处输入图像描述

我已经尝试过将 SGD、Adam 和 RMSprop 作为优化器,但是它们都产生了相同的结果。我还使用了带有和不带有 ImageNet 权重的 MobileNet v2,没有看到任何区别。其他 CNN 架构工作得非常好,验证准确率高达 ~95%。我正在为我的模型使用以下代码:

from keras.applications import MobileNetV2
from keras.models import Sequential
from keras.layers import GlobalAveragePooling2D, Dropout, Dense

basemodel = MobileNetV2(input_shape=(128, 173, 3), include_top=False, weights=None)
model = Sequential(
    [
        basemodel,
        GlobalAveragePooling2D(),
        Dropout(0.5),
        Dense(64, activation="relu"),
        Dropout(0.3),
        Dense(1, activation="sigmoid"),
    ]
)
model.compile(loss="binary_crossentropy", optimizer="sgd", metrics=["accuracy"])

是否有一些明显的东西我遗漏了,或者我只是为我的数据集使用了不正确的超参数?

2个回答

那么在 tensorflow[1,2+] 中微调/迁移学习任何模型的关键步骤:

  • 对图像使用正确的预处理(找到需要mobilenetv2的预处理)
  • 从“ imagenet ”权重开始
  • 更改 BatchNormalization 行为,在 tf 中,默认动量值是 0.99,这不是最好的,在 pytorch 中,它设置为 0.9,这在微调您的模型并且您没有大量数据时会更好(有关更多信息,请参见链接
  1. 使用 imagenet 权重。
  2. 冻结基本模型以防止它接受您的数据训练。
  3. 您可能过度拟合了训练集。尽量不要使用整个 MobileNet 模型,可能只使用前 10-15 层。