使用CNN训练模型生成混淆矩阵时样本数不一致报错如何解决?
问题根因
报错的核心原因是测试集样本总数无法被你设置的batch_Size整除,你用整数除法//计算STEP_SIZE_TEST时,自动舍弃了最后不足一个batch的3个样本,导致最终得到的预测结果只有16976条,而你的真实标签总数是16979条,二者长度不一致触发报错。
解决方案
直接删除预测时的steps参数即可,Keras会自动遍历所有测试样本,不需要手动计算步数。你也可以用向上取整的方式计算步数,保证最后一个不完整的batch也能被纳入预测流程。
修改后的代码(预测部分)
import numpy as np import sklearn.metrics as metrics test_data.reset() # 直接调用predict即可,无需手动指定steps y_pred = model.predict(test_data, verbose=1) predicted_class = np.argmax(y_pred, axis=1) true_class = test_data.classes class_labels = list(test_data.class_indices.keys()) print('Confusion Matrix') cm = metrics.confusion_matrix(true_class, predicted_class) print(cm)
补充说明
如果你使用的是较旧版本的TensorFlow,仍要使用predict_generator方法,就将步数计算逻辑改为向上取整:
import math STEP_SIZE_TEST = math.ceil(test_data.n / test_data.batch_size) test_data.reset() y_pred = model.predict_generator(test_data, steps=STEP_SIZE_TEST, verbose=1)
另外你代码中测试集已经设置了shuffle=False,这个配置是正确的,可以保证预测结果和真实标签的顺序一一对应,不需要修改。
内容的提问来源于stack exchange,提问作者user15457402
相关产品推荐
相关产品推荐

