混淆矩阵生成结果异常求助:InceptionV3模型使用错误排查
问题排查与修正方案
核心问题
你当前代码的致命错误是直接将加载的model对象赋值给model_Predicted列,Pandas会把整个模型识别为单一值,导致混淆矩阵呈现全匹配的错误结果。生成混淆矩阵需要模型对测试数据集的预测结果,而非模型本身。
正确步骤与代码示例
要生成正确的混淆矩阵,需要完成以下步骤:
加载并预处理测试数据集
模型需要输入与训练时格式一致的图像数据(InceptionV3默认输入尺寸为299x299),建议用ImageDataGenerator加载测试集:from tensorflow.keras.preprocessing.image import ImageDataGenerator # 测试集预处理(需与训练时完全一致) test_datagen = ImageDataGenerator(rescale=1./255) test_generator = test_datagen.flow_from_directory( 'path/to/your/test_dataset', # 测试集根路径,子文件夹对应各类别 target_size=(299, 299), # 匹配InceptionV3输入尺寸 batch_size=32, class_mode='categorical', # 多分类任务用categorical,二分类用binary shuffle=False # 关闭打乱,保证标签与预测结果顺序对应 )用模型生成预测结果
通过model.predict()得到测试集的预测概率,再转换为对应类别标签:import numpy as np # 获取测试集预测概率 predictions = model.predict(test_generator) # 将概率转换为类别索引 predicted_classes = np.argmax(predictions, axis=1) # 获取测试集真实类别索引 true_classes = test_generator.classes # 获取类别名称与索引的映射 class_labels = list(test_generator.class_indices.keys())生成混淆矩阵并可视化
关联真实标签与预测标签,生成并绘制混淆矩阵:import pandas as pd import seaborn as sn import matplotlib.pyplot as plt # 构建真实标签与预测标签的DataFrame df = pd.DataFrame({ 'y_Actual': [class_labels[i] for i in true_classes], 'model_Predicted': [class_labels[i] for i in predicted_classes] }) # 生成混淆矩阵 confusion_matrix = pd.crosstab(df['y_Actual'], df['model_Predicted'], rownames=['Actual'], colnames=['Predicted'], margins=False) # 可视化混淆矩阵 plt.figure(figsize=(12, 8)) sn.heatmap(confusion_matrix, annot=True, fmt='d', cmap='Blues') plt.show()
关键注意事项
- 测试集文件夹结构需符合要求:根文件夹下每个子文件夹对应一个类别,文件夹名称为类别名。
- 预处理方式(如归一化比例、图像尺寸)必须与模型训练时完全一致,否则预测结果会失真。
- 必须设置
shuffle=False,确保真实标签和预测结果的顺序一一对应。
内容的提问来源于stack exchange,提问作者อิม อัฐวงศ์
相关产品推荐
相关产品推荐

