验证精度非常低,但训练准确率很好



我正在四个类别的医学图像上实施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

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

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))

12 个时期后的输出

一个非常常见的情况。您的模型无法概化数据。您可以尝试以下步骤来解决此问题:

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

如果您仍然遇到相同的问题,请绘制混淆矩阵以查看模型遭受最大损失的地方。然后,您可以分析这些特定类的数据。

顺便说一句,对于灰度图像问题,你可以看看这里: 如何使用带有灰度图像的预训练神经网络?

相关内容

最新更新