You need to enable JavaScript to run this app. PyTorch自定义CNN无predict方法,如何生成分类报告?
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义CNN无predict方法,如何生成分类报告?

报错根因

两处核心问题直接导致当前代码无法运行:

  • 你尝试复用的.predict()是TensorFlow/Keras框架的模型推理接口,当前使用的是原生PyTorch实现的自定义CNN,本身不存在该方法,因此触发属性不存在的报错
  • 现有fit函数仅打印训练指标,未实际返回损失、准确率数值,即使解决了接口问题,训练循环处的变量接收逻辑也会运行失败
具体改造方案

1. 补全fit函数的返回值逻辑

将fit函数最后仅做打印的代码段,替换为实际返回对应指标:

# 替换原fit函数末尾的print行
train_accuracy = 100. * train_running_correct / len(train_dataloader.dataset)
print(f"Train Loss: {train_loss:.4f}, Train Acc: {train_accuracy:.2f}")
# 新增这行返回逻辑
return train_loss, train_accuracy

2. 新增独立的分类报告生成函数

分类报告是模型全量训练完成后的最终评估环节,不需要嵌入到每轮训练流程中避免拖慢训练速度。函数逻辑和现有验证流程完全同源,仅额外收集所有测试集批次的真实标签、预测标签,供报告计算使用:

from sklearn.metrics import classification_report

def get_final_classification_report(model, test_dataloader, class_names):
    model.eval()
    collected_preds = []
    collected_truth = []
    with torch.no_grad():
        for batch_imgs, batch_labels in tqdm(test_dataloader, desc="生成最终分类报告中"):
            batch_imgs = batch_imgs.to(device)
            batch_labels = batch_labels.to(device)
            # 走和验证、推理完全一致的前向传播逻辑
            batch_output = model(batch_imgs)
            # 提取每个样本的预测类别索引
            _, batch_pred = torch.max(batch_output, 1)
            # 把GPU上的张量转到CPU、转成numpy格式后拼接为全量列表
            collected_preds.extend(batch_pred.cpu().numpy())
            collected_truth.extend(batch_labels.cpu().numpy())
    # 直接生成打印完整分类报告
    print(classification_report(collected_truth, collected_preds, target_names=class_names))

3. 调整代码执行顺序

把分类报告的调用放在全量训练流程结束、模型权重保存之前的位置,不要插入到训练循环内部:

  • 先跑完所有训练轮次的fit、validate流程,累计训练/验证的损失、准确率指标
  • 完成训练、验证的损失/准确率曲线绘制
  • 调用get_final_classification_report(model, testloader, lb.classes_)生成正式的分类报告
  • 最后执行模型权重保存、训练完成提示的逻辑
避坑要点
  • 不需要给自定义PyTorch模型强行绑定Keras风格的.predict()方法,现有代码的推理路径走model(输入数据)的前向传播逻辑已经完全可用,强行适配跨框架接口只会增加不必要的改造量
  • 收集标签时必须将张量从GPU设备转移到CPU后再转换为numpy数组,否则会触发设备不匹配的类型报错
  • 不要在每轮训练时都生成分类报告,全量测试集推理会大幅拉长训练周期,分类报告仅需在最终模型上运行一次即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 21:06:10