python - Keras CNN 中用于多类图像分类的验证精度常数

标签 python tensorflow keras conv-neural-network

我正在执行多类图像分类任务。在训练我的 CNN 时,验证准确率在所有时期都保持不变。我尝试了不同的模型架构和不同的超参数值,但没有任何变化。任何想法将不胜感激。这是我目前的结果:
Train and Validation Loss and Accuracy

这是我的CNN:

model = models.Sequential()

model.add(Conv2D(32, (3, 3), activation = 'relu', input_shape= . 
(img_width, img_height, 3)))

model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(64, (3, 3), activation = 'relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(128, (3, 3), activation = 'relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())
model.add(layers.Dropout(0.2))
model.add(layers.Dense(64, activation = 'relu'))

model.add(layers.Dropout(0.2))
model.add(layers.Dense(8, activation = 'softmax'))

model.compile(loss='categorical_crossentropy',
optimizer=optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, 
epsilon=1e-08, decay=0.0001),metrics = ['acc'])

model.summary()

最佳答案

有多种可能的潜在因素可能导致这种现象 - 以下是您可以尝试的一些初步修复的列表,但并不详尽:

  • 如果您正在使用 Adam 优化器(或任何其他自适应学习率优化器,例如 RMSprop 或 Adadelta),请尝试使用比默认值小得多的初始学习率,大约为 10E-6。或者,尝试使用 10E-2 到 10E-3 范围内某处的初始学习率的随机梯度下降。您还可以设置一个较大的初始学习率,并通过使用 Keras 的 LearningRateScheduler 回调并定义自定义学习率计划(针对 SGD)在几个训练时期的过程中对其进行退火。
  • 如果上述方法不起作用,请尝试降低网络的复杂性(例如层数)并增加训练集的大小。此外,当您检查训练数据集时,请确保您的训练集不会受到类别不平衡的影响 - 如果确实如此,您可以使用 class_weights 人为地加权与代表性不足的类别的训练示例相关的损失。可以传递给模型的 fit() 的参数方法。
  • 如果问题仍然存在,您可能不得不面对这样一种可能性,即持续的验证损失可能是本质上拟合噪声的人工制品,并且模型发出的任何(甚至有些似是而非的)预测都可能是虚假的。此时,您可能想尝试提取更多信息特征、更多种类的特征或对您的训练集执行广泛的数据增强。

  • 查看此 GitHub 问题以获取可能有助于解决您的问题的进一步建议:

    https://github.com/keras-team/keras/issues/1597

    关于python - Keras CNN 中用于多类图像分类的验证精度常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52356068/

    相关文章:

    python - 如何使用外键将帖子添加到 django 用户模型

    python - Letsencrypt 在 ubuntu 16.04 中安装失败

    android - 在 React Native 中使用 python 库

    TensorFlow:图形优化(GPU 与 CPU 性能)

    python - Tensorflow:与 Session() 相比,使用 InteractiveSession() 总是更方便吗?

    python - Keras:如何将 fit_generator 与不同类型的多个输出一起使用

    Python - 从子文件夹进行绝对导入

    python - 将 Tensorflow Graph 转换为使用 Estimator,使用 'TypeError: data type not understood' 或 `sampled_softmax_loss` 获得损失函数 `nce_loss`

    python - Keras 中有 DropConnect 层吗?

    python - Keras 模型给出的测试精度为 1.0