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

重训练InceptionResNetV2后,CIFAR100模型真实准确率计算及分类报告异常排查

CIFAR100模型分类报告异常问题解决与准确率说明

核心问题原因

你遇到的分类报告异常(仅第73类召回率为1,其余为0)+ UndefinedMetricWarning,本质是sklearn分类报告的输入标签格式不匹配:

  • classification_report要求传入整数形式的真实标签和预测标签,但你大概率传入了独热编码格式的标签,或是预测结果未从概率分布转为整数标签,导致模型预测结果被错误匹配,最终表现为所有样本都被判定为第73类。

分步解决方案

1. 修正标签与预测结果的格式

处理真实标签

如果测试集标签做了独热编码,需要转换回整数形式:

import numpy as np
# 假设y_test是独热编码后的测试集标签,shape为(样本数, 100)
y_test_true = np.argmax(y_test, axis=1)

处理预测结果

模型predict输出的是每个样本的类别概率分布,需转为整数标签:

# x_test_scaled是缩放至75×75的测试集数据
y_pred_proba = model.predict(x_test_scaled)
# 取概率最大的类别作为预测结果
y_pred = np.argmax(y_pred_proba, axis=1)

重新生成分类报告

from sklearn.metrics import classification_report
print(classification_report(y_test_true, y_pred))

2. 验证独热编码的正确性

训练和测试阶段的独热编码必须保持一致,确保类别数设置为100:

from tensorflow.keras.utils import to_categorical
# 训练集标签转独热编码
y_train_onehot = to_categorical(y_train, num_classes=100)
# 测试集标签转独热编码,必须和训练集用相同的num_classes
y_test_onehot = to_categorical(y_test, num_classes=100)

3. 消除UndefinedMetricWarning

该警告是因为部分类别没有被模型预测到(分母为0无法计算指标),修正标签格式后,只要模型确实预测了多个类别,警告会自动消失。

真实准确率的计算方式

Keras evaluate返回的准确率

model.evaluate()返回的是全局准确率,计算逻辑为:

全局准确率 = 正确预测的样本总数 / 测试集样本总数

与sklearn准确率的一致性

你可以用sklearn手动验证,结果会和evaluate返回的0.7148完全一致:

from sklearn.metrics import accuracy_score
acc = accuracy_score(y_test_true, y_pred)
print(f"手动计算全局准确率:{acc:.4f}")

分类报告中的accuracy字段就是这个全局准确率,而宏平均(macro avg)、加权平均(weighted avg)是对每个类别的精确率、召回率做不同方式的平均,用于评估模型在不均衡数据集上的表现,全局准确率是最直接的整体性能指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:12:50