验证精度很低,但训练精度很高

时间:2020-06-26 07:46:58

标签: tensorflow keras cnn

我正在对四类医学图像实施ResNet50模型。我最初有一个数据集,每个班级有250张图像,然后将它们分为2个文件夹train和val,并使用val数据作为测试数据集,并使用train的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

1 个答案:

答案 0 :(得分:3)

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

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

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

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