TensorFlow图像分类模型训练精度达标但每次返回相同预测问题
手指识别模型预测异常的问题排查与修复
你的模型训练/验证精度显示95%以上,但每次预测返回近乎一致的结果,核心是两处代码逻辑错误:
1. 损失函数与模型输出不匹配
模型最后一层使用softmax激活输出概率分布,但编译时设置了SparseCategoricalCrossentropy(from_logits=True)。from_logits=True仅适用于未经过激活的原始输出(logits),此配置会导致损失计算逻辑错误,模型实际并未学习到有效特征,训练精度是虚假的。
修复:
将损失函数的from_logits改为False:
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
2. 预测阶段重复执行Softmax
模型输出已经是softmax处理后的概率,你在预测时又调用tf.nn.softmax(predictions[0]),对已归一化的概率再次软化,导致结果失真。
修复:
直接使用模型输出的概率值:
predictions = model.predict(img_array) score = predictions[0] # 无需再次计算softmax
额外验证点
- 检查验证集路径
dataset_pathh是否为笔误,确保训练/验证集是独立的,避免因数据集重复导致精度虚高。 - 确认预测时的图像预处理和训练完全一致:当前代码中
img_array / 255和训练时的Rescaling(1./255)匹配,灰度转换逻辑也没问题,无需调整。
修改后重新训练模型,即可得到符合预期的预测结果。
内容的提问来源于stack exchange,提问作者Kristaps Ālmanis
相关产品推荐
相关产品推荐

