我有一个图像分类任务,我将 Keras 用于具有 CNN 层的网络,在训练中似乎取得了不错的结果,但在测试中却表现不佳。在训练后,我很快看到准确度和验证准确度提高到以下水平:
4678/4678 [==============================] - 2s 427us/step - loss: 0.0607 - acc: 0.9795 - val_loss: 0.1605 - val_acc: 0.9590
现在我的第一反应是,这可能好得令人难以置信,事实确实如此。在测试模型时,它的性能很差。
Bashar Haddad认为可能存在数据不平衡问题,但是对于以下数据规范,在拆分为 25% 验证之前,我认为这不是我的问题:
(data is being fit consecutively in a for loop)
average number of datapoints in training: 4500
average number of datapoints in testing: 1500
average number of classes: 46 (max 49)
并且大多数类在每个类中都有大量的数据点。
基于此,我看到用户发现增加批量大小和降低学习率有帮助,我通过以下方式拟合模型......
varying batch size from 100 -> 500
varying epochs size from 50 -> 250
cnn_model.fit(X_train, y_train,
batch_size=500,
epochs=50,
verbose=1,
shuffle=True,
validation_data=(X_test, y_test)
)
变化无常batch_size,epochs几乎没有影响。
由于准确度和验证准确度都很高,而且在训练时它们之间的差异也很小,我很困惑为什么在测试数据上使用这个模型会导致如此糟糕的性能。
这可能是什么原因?以及可能的解决方案来解决它?