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

PyTorch搭建CNN后生成全测试集混淆矩阵报错如何解决

问题根源
  • 你收集标签和预测结果的逻辑存在两处核心错误:一是往actual_labels和total_predictions中追加的是每个batch的带批次维度的张量,最终列表是[batch1张量, batch2张量...]的嵌套结构,不符合sklearn要求的一维序列输入格式,因此触发多标签格式报错;二是推理代码存在变量名错误,你计算得到的预测结果是predicted,但你往列表中追加的是未定义先使用的final_pred,收集的预测值本身就不正确。
  • 你之前在循环内调用混淆矩阵方法,只用到了最后一个batch的标签和预测值,自然只能得到最后一个batch的计算结果。
修正后完整代码

第一步:修正推理阶段的结果收集逻辑

import torch
import numpy as np
from sklearn.metrics import confusion_matrix
import pandas as pd

correct = 0
total_predictions = []
actual_labels = []

with torch.no_grad():
    for images, labels in testloader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        
        # 把当前batch的标签和预测转成CPU端numpy数组再存入列表
        actual_labels.append(labels.cpu().numpy())
        total_predictions.append(predicted.cpu().numpy())
        
        correct += (predicted == labels).sum().item()

# 把所有batch的数组合并为一维数组,适配sklearn输入要求
actual_labels = np.concatenate(actual_labels)
total_predictions = np.concatenate(total_predictions)

第二步:生成全测试集混淆矩阵

label_map = {
    'healthy_wheat': 0,
    'leaf_rust': 1,
    'stem_rust': 2
}
label_names = list(label_map.keys())
label_values = list(label_map.values())

def conf_mat(y_true, y_pred, label_names, label_values, **kwargs):
    conf_mat_arr = confusion_matrix(y_true, y_pred, labels=label_values, **kwargs)
    df = pd.DataFrame(conf_mat_arr, columns=label_names, index=label_names)
    df.columns.name = "预测值"
    df.index.name = "真实值"
    return df

# 调用方法生成混淆矩阵
result_df = conf_mat(actual_labels, total_predictions, label_names, label_values, normalize="true")
print(result_df)
关键修改说明
  • 每个batch的结果先转成CPU numpy数组再存储,避免设备不兼容问题
  • 所有batch迭代完成后用np.concatenate合并为一维数组,彻底解决嵌套序列报错
  • 调用confusion_matrix时labels参数传入标签对应的数值列表,不要直接传入字典,避免参数类型不匹配
  • 修正了推理阶段变量名写错的问题,保证收集的预测值正确

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:06:01