You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:15:06