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

TensorFlow自定义二分类模型预测时第二类得分异常偏高问题

问题诊断与修复方案

核心问题1:损失函数参数不匹配

模型最后一层使用了softmax激活,但损失函数SparseCategoricalCrossentropy设置了from_logits=True,这是错误的。from_logits=True仅适用于未经过激活函数(如softmax/sigmoid)的原始输出,当前设置会导致损失计算逻辑混乱,模型实际学习目标偏移。

修复代码:

lossFn = tf.keras.losses.SparseCategoricalCrossentropy()
# 或显式设置from_logits=False,默认值即为False
lossFn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

核心问题2:学习率过高

你注释了学习率调度逻辑,但RMSprop默认学习率为0.001,而你定义的初始学习率0.3远超合理范围,过高的学习率会导致模型训练时权重震荡,无法收敛到有效特征,最终只能随机偏向某一类。

修复代码:
使用合理初始学习率,或启用注释的学习率调度:

initial_learning_rate = 0.001
decay_steps = 1000
decay_rate = 0.5
learning_rate_fn = tf.keras.optimizers.schedules.InverseTimeDecay(initial_learning_rate, decay_steps, decay_rate)

model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=learning_rate_fn),
              loss=lossFn,
              metrics='accuracy')

关键数据预处理缺失

图像数据通常是0-255的整数范围,直接输入模型会导致ReLU激活函数快速饱和,模型无法有效提取特征,需要将数据归一化到0-1区间。

修复代码:在getDataset和getTestSet中添加归一化步骤:

# 在getDataset中
trainData = data['img'] / 255.0
# 在getTestSet中
testData = data['img'] / 255.0

其他排查方向

  • 数据集平衡性:检查训练集、测试集中两类样本的数量占比,如果第二类样本占比极高,模型会自然偏向预测该类,需通过数据增强或类别权重调整优化。
  • 标签正确性:确认trainLabels和testLabels的取值为0和1(符合SparseCategoricalCrossentropy的输入要求),无标签值错误情况。

修复后验证流程

  1. 重新训练模型,观察训练准确率、损失是否稳定下降
  2. 训练时加入验证集(从训练集中拆分一部分),监控val_accuracy,确认模型无过拟合/欠拟合问题
  3. 再次评估测试集,查看预测结果是否不再全偏向第二类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:35