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

TensorFlow改造乳腺癌教程后预测全为0且损失异常问题排查

问题根源排查

1. 训练任务配置和数据集属性完全错位

原YouTube乳腺癌教程是标准二分类场景:标签为0/1离散类别,模型最后一层搭配Sigmoid激活,损失使用二元交叉熵。你当前使用的标签是-1到1区间的连续小数,属于回归任务,直接沿用原二分类的配置会导致:

  • 损失计算逻辑彻底失效:正常二元交叉熵的取值恒为非负,你观察到的负向、指数级增长的损失值,是模型输出分布和标签分布完全错配引发的数值溢出,整个训练过程没有学习任何有效特征,模型权重处于完全发散的状态。
  • 全0预测结果是训练发散的必然产物:梯度爆炸后,最后一层Sigmoid的输出会被异常权重推到趋近于0的固定区间,和输入特征没有任何关联。

2. 输入特征未做归一化处理

你使用的原始输入是0-99区间的整数,没有经过缩放预处理。原教程的乳腺癌数据集是经过标准化归一化的,直接把未缩放的高值特征输入网络,会直接触发梯度爆炸,是损失值从百万级快速涨到百亿级的核心原因。

3. 超参数设置不匹配任务场景

原教程适配二分类任务的batch_size、学习率,在你的高值输入、回归任务场景下,会进一步放大梯度波动,加速训练发散。

落地解决方法
  • 调整模型结构适配回归任务:替换原二分类模型的最后一层,去掉Sigmoid激活,改为线性输出层;损失函数从二元交叉熵切换为回归场景通用的损失,比如MeanSquaredError、MeanAbsoluteError。
  • 补全数据预处理流程:对输入特征做归一化,将0-99的原始值缩放到0-1或-1到1的区间,可直接用代码实现:
    X_scaled = (X - X.min()) / (X.max() - X.min())
    确保标签数值范围和模型输出尺度匹配,避免数值差过大引发训练震荡。
  • 优化训练超参数:将原batch_size=1调整为16/32/64的常规批次大小,适当降低学习率,跑20个左右epoch观察损失变化,确认损失稳定下降而非发散后,再执行预测流程。
  • 验证预测输出:训练收敛后调用classifier.predict(X_test)得到的结果是和标签同尺度的连续值,不会出现全0的固定输出;如果后续需要做分类判断可单独叠加阈值逻辑,不要直接套用原二分类任务的结果判断规则。

内容的提问来源于stack exchange,提问作者Donald Albin Jr.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 19:54:08