【问题标题】:Validation accuracy very low but good training accuracy验证准确度非常低但训练准确度很好
【发布时间】:2020-10-16 18:57:32
【问题描述】:

我正在对四类医学图像实施 ResNet50 模型。我最初有一个每类 250 张图像的数据集,我将它们分成 2 个文件夹 train 和 val,并使用 val 数据作为测试数据集,80% 的训练数据作为训练数据集,20% 作为验证数据集。

我尝试了一个我在网上找到的代码。我做了很多实验,但没有什么能提高验证数据集的准确度,尽管训练准确度不错,以后可以改进。

请就我的问题陈述向我提出提高验证准确性的方法。 PS:虽然图像是黑白的,但我使用输入形状为(224,224,3),因为我无法翻译我找到的灰度图像代码。希望这不是这里的主要问题。

参考代码:https://github.com/anujshah1003/Transfer-Learning-in-keras---custom-data/blob/master/transfer_learning_resnet50_custom_data.py

我所做的唯一更改是更改数据集的目录,并在我的代码中排除了 Flatten 层,因为 avg_pool 层也被展平,因此可以直接应用 Dense 层。

last_layer = model.get_layer('avg_pool').output
out = Dense(num_classes, activation='softmax', name='output_layer')(last_layer)
custom_resnet_model = Model(inputs=image_input,outputs= out)

t=time.time()
hist = custom_resnet_model.fit(X_train, y_train, batch_size=32, epochs=12, verbose=1, 
validation_data=(X_test, y_test))
print('Training time: %s' % (t - time.time()))
(loss, accuracy) = custom_resnet_model.evaluate(X_test, y_test, batch_size=10, verbose=1)
print("[INFO] loss={:.4f}, accuracy: {:.4f}%".format(loss,accuracy * 100))

Output after 12 epochs

【问题讨论】:

    标签: tensorflow keras conv-neural-network


    【解决方案1】:

    一个很常见的情况。您的模型无法概括数据。您可以尝试以下步骤来克服这个问题:

    1. 收集更多数据:尝试收集数据的更多变体。它将帮助您的模型泛化类。
    2. 增强:一种非常常见且非常有用的技术。尝试不同的角度、不同的对比度、放大缩小等。

    如果您仍然面临同样的问题,请绘制混淆矩阵以查看您的模型在哪里受到的影响最大。然后您可以分析这些特定类的数据。

    顺便说一句,对于灰度图像问题,您可以在这里查看:How can I use a pre-trained neural network with grayscale images?

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2018-08-16
      • 2023-04-03
      • 2021-11-12
      • 2020-03-29
      相关资源
      最近更新 更多