分层交叉折叠医学图像分类时DatasetType未定义错误求助
解决DatasetType未定义错误及后续结果保存与指标计算
错误原因及修复方案
这个错误源于fastai版本迭代后,数据集类型的枚举类发生了变更,分两种情况处理:
情况1:使用fastai v2及以上版本(版本号≥2.0)
fastai v2已移除DatasetType枚举,可通过以下三种方式替代:
- 直接传入验证集索引:
preds_test, y_test = learn.get_preds(ds_idx=1) # ds_idx=0对应训练集,1对应验证集 - 直接指定验证集数据加载器:
preds_test, y_test = learn.get_preds(dl=learn.dls.valid) - 导入
Loaders枚举类使用(可选,语义更清晰):from fastai.data.core import Loaders preds_test, y_test = learn.get_preds(Loaders.Valid)
情况2:使用fastai v1版本(版本号<2.0)
此时需手动导入DatasetType,在代码开头添加:
from fastai.basic_data import DatasetType
之后再执行preds_test, y_test = learn.get_preds(DatasetType.Valid)即可正常运行。
结果保存与评估指标计算
保存预测结果
用numpy将预测结果和真实标签保存为本地文件:
import numpy as np # 保存预测概率 np.save('validation_preds.npy', preds_test) # 保存真实标签 np.save('validation_labels.npy', y_test)
计算常规评估指标
借助sklearn的metrics模块计算准确率、混淆矩阵、精确率、召回率等指标:
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report # 将预测概率转换为类别索引(取最大概率对应的类别) preds_class = preds_test.argmax(dim=1).numpy() # 真实标签转换为numpy数组(若为tensor格式) y_test_np = y_test.numpy() # 计算准确率 accuracy = accuracy_score(y_test_np, preds_class) # 生成混淆矩阵 confusion_mat = confusion_matrix(y_test_np, preds_class) # 生成分类报告(包含精确率、召回率、F1分数) class_report = classification_report(y_test_np, preds_class) print(f"验证集准确率:{accuracy:.4f}") print("混淆矩阵:\n", confusion_mat) print("分类报告:\n", class_report)
内容的提问来源于stack exchange,提问作者abomuflih
相关产品推荐
相关产品推荐

