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

EfficientNet B0模型测试集准确率正常但单张图片预测类别错误

问题定位与解决方法

1. 标签映射顺序不匹配(核心诱因)

训练阶段使用LabelEncoder生成标签编码时,编码顺序是按照数据集文件夹名称的字典序自动生成的,和你推理阶段手动定义的标签列表['vehicle', 'army', 'general']没有对应关系,会直接导致预测输出的索引匹配到错误的类别。
验证修复方式:训练完成后打印y_labelencoder.classes_,输出数组的顺序就是编码0、1、2对应的真实类别,将推理阶段的标签列表替换为该输出即可。

2. 训练与推理预处理逻辑不一致

  • 训练流程:你先对图像做了images.astype('float32') / 255.0归一化,又调用preprocess_input做二次数值转换
  • 推理流程:仅调用preprocess_input,没有提前做除以255的操作,导致输入模型的像素数值范围和训练时完全不同,预测结果必然出错。
    修复方式:统一预处理逻辑,删除训练阶段自行添加的/ 255.0操作,直接使用EfficientNet自带的预处理函数即可,官方实现已经包含了对应的数值范围转换逻辑。

3. 通道顺序不匹配

cv2默认读取图像为BGR通道顺序,而EfficientNet的预处理逻辑默认针对RGB图像,训练和推理阶段都需要增加通道转换步骤,在cv2.imread之后添加代码img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)即可。

4. 潜在代码笔误

数据集加载部分的循环代码存在变量名错误:for i in dataset_path:循环内写的是data_path = path + str(I),大写I和循环变量小写i不匹配,如果不是粘贴代码时的手误,会导致数据集加载错误,训练数据本身存在标注错位问题。

效果验证步骤

  1. 修正标签映射列表和预处理逻辑后,先取测试集中的已知标注样本做单图推理,确认预测结果和标注一致后,再测试其他样本。
  2. 可以打印单图推理的输出概率,确认最高概率对应的标签和真实类别匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:04