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

Keras(TensorFlow后端)训练模型始终预测0问题求助

排查训练准确率达标但预测全为0的问题

这种训练表现不错但新数据预测完全跑偏的情况,我之前在做图像分类任务时也碰到过几次,大概率是这几个环节出了问题,咱们一步步来排查:

1. 训练与预测的预处理完全不一致(最常见)

模型对输入数据的格式非常敏感,哪怕一点点差异都会导致输出异常:

  • 检查归一化/标准化步骤:训练时是不是把图片像素值除以255缩到了0-1区间?预测时有没有漏掉这一步?如果训练用的是归一化后的数据,预测时喂原始0-255的像素,模型根本认不出特征。
  • 确认图像尺寸匹配:你训练用了128、256、384三种尺寸,预测时有没有把测试图片resize到对应尺寸?比如训练用256×256,预测时随便喂个512×512的图,输入维度不匹配,结果肯定乱套。
  • 检查颜色空间:训练时是不是转成了灰度图(单通道),但预测时还是RGB三通道?或者反过来,这会让模型输入的特征维度完全不对。

2. 模型保存或加载环节出错

  • 你是用model.save()保存完整模型,还是用model.save_weights()只存权重?如果是后者,加载时有没有严格复刻训练时的模型结构(比如输入形状、层的数量和参数)?哪怕少了一个 dropout 层,都可能导致模型失效。
  • 核对输出层的激活函数:二分类任务应该用sigmoid输出0-1之间的概率,如果不小心用了softmax但只设了1个输出节点,或者类别索引搞反了,都可能出现全0输出的情况。
  • 确认加载的是训练完成的最优权重:有没有可能保存时存错了文件路径,或者加载的是训练前的初始权重?可以打印模型的部分权重值,和训练结束时的权重对比一下。

3. 测试数据本身的问题

  • 你说的“未见过的两类图片”,是不是和训练集的分布差异过大?比如训练集都是清晰的印刷体文本图,测试集是模糊的手写体或者完全不同场景的图,模型泛化能力不够,就会瞎输出。
  • 有没有可能标签解读反了?比如模型输出0对应“含文本图片”,1对应“无文本”,但你误以为0是无文本,导致看起来全错。可以拿一张明确含文本的测试图,打印模型的原始输出值,看看是接近0还是1。

4. 训练过程存在异常(过拟合或训练不充分)

  • 训练准确率0.9,那验证集准确率怎么样?如果验证集准确率只有0.5左右,说明模型严重过拟合,只能死记训练集,对新数据完全没泛化能力。
  • 查看训练时的损失曲线:如果损失下降到一定程度就停滞,或者准确率波动特别大,可能是学习率太高、batch size不合适,导致模型没有真正学到有效特征,只是靠运气在训练集上拿到了高准确率。

快速验证步骤

  • 先拿训练集中的一张已知标签的图片去预测,如果输出正常,说明问题出在测试数据或预测预处理;如果训练集的图预测也全为0,那肯定是模型保存/加载或者训练的问题。
  • 打印model.summary(),确认输出层的形状和激活函数是否符合二分类需求(比如Dense(1, activation='sigmoid'))。
  • 检查预测代码:是不是用model.predict()之后,直接把输出当成了类别标签?比如sigmoid输出0.3,你直接取整得到0,但其实应该用阈值(比如>0.5为类别1,否则类别2)来判断,而不是直接取整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:18