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

TensorFlow肺炎识别CNN出现极小预测值、验证指标为空问题咨询

问题1:为什么会出现极小的预测值

你使用的模型最后一层是sigmoid激活函数,输出值对应样本为肺炎阳性的概率,取值范围在0到1之间。当模型认为样本是阴性的置信度极高时,最后一层全连接层输出的logit值会是绝对值很大的负数,代入sigmoid公式计算后就会得到趋近于0的极小值。
出现这种情况通常有三个原因:

  • 模型训练轮次过高:你设置了2000轮训练,远超过常规图像分类任务的训练轮次,模型很容易过拟合,对训练集中见过的阴性样本判断置信度过高,输出极端值。
  • 模型容量偏大:三层卷积层后接1024维全连接层的结构,对于肺炎X光分类任务来说容量充足,训练足够多轮后很容易出现预测置信度过高的问题。
  • 数据集存在类别不均衡:该肺炎X光数据集的阳性样本数量远多于阴性样本,训练过程中模型为了降低损失,会倾向于对确定的阴性样本输出尽可能低的概率值。

如果想要避免极端输出,可以在全连接层加入Dropout层、给卷积层/全连接层添加L2正则化,或者使用提前停止回调终止过拟合阶段的训练。

问题2:为什么val_acc、val_loss取值为空

这个问题常见的原因有三个:

  • 验证集步数设置不合理:你使用的数据集官方验证集只有16张样本,你设置的batch_size=20,意味着验证集最多只能生成1个batch的数据,但是你在model.fit里设置了validation_steps=200,需要4000张验证样本才能跑完,超过验证集实际样本量的情况下,TensorFlow不会生成验证指标,也就不会写入history对象。
  • 指标键名不匹配:部分旧版本的TensorFlow/Keras中,准确率的记录键名为acc,对应的验证集准确率键名为val_acc,而非val_accuracy。你可以先打印history.history.keys()查看所有存在的键名,确认是否是键名写错。
  • 回调逻辑影响:如果你传入的callbacks列表里有提前停止类的回调,且模型在第一轮验证执行之前就触发了停止逻辑,也会导致验证指标没有记录。

你可以先把validation_steps调整为1,再重新训练一轮验证问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:04