今天在测试模型时发现一个问题,
keras训练模型,训练集准确率很高,测试集准确率很低
,因此记录一下希望能帮助大家也避坑:
首先keras本身不同的版本都有些不同的或大或小的bug,包括之前也困扰过我的BN层问题(相信很多人都中过招),因此我先说下我的对应版本:
keras:2.3.1 tensorflow-gpu:1.15 CUDA:10.0 cudnn:7.6.3
在训练模型完成后在测试集测试模型准确率:
def valid_data(valid_data_dir='./data/val'):
valid_datagen = ImageDataGenerator(rescale=1. / 255)
valid_generator = valid_datagen.flow_from_directory(valid_data_dir,
target_size=(224, 224),
batch_size=16,
class_mode='categorical',
)
return valid_generator
valid_generator = valid_data()
model = load_model('resnet.h5')
predictions = model.predict_generator(valid_generator,verbose=1)
predict_label = predictions.argmax(axis=-1)
true_label = valid_generator.classes
acc=accuracy_score(true_label,predict_label)
print(acc, end='\n\n')
乍一看代码其实没有太大问题,但是最后准确率很低:
核心原因是对测试集的数据顺序做了打乱,使得预测label与真实label无法对应:
预测label是对打乱的数据预测的:
但是真实label是未打乱的:
解决的办法是对代码进行修改:
shuffle=False
修改后的模型测试准确率就正常了:
当然,导致模型测试集准确率低的原因远不止这一种,还有很多其他的可能,所以希望大家在遇见具体问题的时候还是能够具体分析。
版权声明:本文为qq_41981894原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。