120类犬种分类CNN预测结果验证与数组索引对应犬名错误排查
犬种CNN预测异常问题排查
推理代码存在两处核心错误,是预测出错的直接原因
- 索引提取逻辑错误:
softmax层输出的是120个类别的概率值,并非硬编码的0/1。原代码用np.where(prediction == 1)匹配值为1的位置,无法得到正确的类别索引。正确写法为res = np.argmax(prediction)。 - 预处理不一致:训练时对输入做了
X = X / 255的归一化,将像素值从0-255缩放到0-1区间,但推理时的prepare函数返回的是原始像素值,未做归一化处理,输入分布与训练时差异过大,导致预测失准。需在prepare函数的返回语句前添加new_array = new_array / 255。
其他冗余/待确认问题
- 推理代码中遍历
CATEGORIES给class_num赋值的循环无实际作用,属于冗余代码。 - 输出犬名时使用
breed[10:]截取前缀的逻辑,依赖数据集文件夹命名为编号-犬名的格式,需确保所有犬类文件夹命名规则统一。 - 预处理代码中使用了
to_categorical方法,但未在导入部分引入该方法,脱离原有运行环境直接执行会报错,需补充from tensorflow.keras.utils import to_categorical到导入列表。
验证流程
修复上述两个核心错误后,先取训练集内的图片做推理测试,若能输出正确犬名,再用外部验证集测试。若训练集图片预测仍出错,再排查模型过拟合、训练数据标注错误等问题。
内容的提问来源于stack exchange,提问作者Doctor Garbage
相关产品推荐
相关产品推荐

