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

使用ImageDataGenerator结合MobileNet计算图像分类指标报错求助

问题解决:ImageDataGenerator格式下计算分类指标

错误原因

  1. 维度不匹配:tf.math.argmax(y_pred_logits) 默认按axis=0计算,返回的是每个类别维度的最大值索引(形状为(10,)),但test_batches.classes是测试集所有样本的真实标签(形状为(1887,)),两者样本数不一致导致报错。
  2. 多分类指标参数缺失:你的任务是10分类,sklearn的precision_score等函数默认针对二分类,必须指定average参数定义多分类下的指标计算方式。

修改后的完整代码

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 生成预测结果
y_pred_logits = model.predict(test_batches)
# 按每个样本维度(axis=1)取最大值索引,得到每个样本的预测类别
y_pred = tf.math.argmax(y_pred_logits, axis=1).numpy()  # 转成numpy数组方便后续计算

# 获取测试集真实标签
test_classes = test_batches.classes

# 计算指标
accuracy = accuracy_score(test_classes, y_pred)
print('Accuracy: %f' % accuracy)

# 多分类场景下指定average参数,可选值:
# - 'macro': 对每个类别单独计算后取平均
# - 'weighted': 按类别样本数量加权平均
# - 'micro': 计算全局的tp、fp、fn后计算指标
precision = precision_score(test_classes, y_pred, average='weighted')
print('Precision: %f' % precision)

recall = recall_score(test_classes, y_pred, average='weighted')
print('Recall: %f' % recall)

f1 = f1_score(test_classes, y_pred, average='weighted')
print('F1 score: %f' % f1)

关键说明

  • shuffle=False必须保留:你在加载test_batches时已经设置了shuffle=False,这很重要——确保预测结果的顺序和test_batches.classes的标签顺序完全对应,否则指标计算会完全错误。
  • average参数选择:根据你的任务需求选择:
    • 若所有类别重要性相同,选'macro';
    • 若类别样本不平衡,选'weighted'更合理;
    • 若关注全局整体表现,选'micro'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:39:19