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

Keras调用fit()后损失不变化且准确率始终为0问题求助

问题解决方案

核心错误1:输出层激活函数不匹配任务类型

你正在做连续数值预测的回归任务,但输出层误用了仅适合多分类场景的softmax激活函数:

model.add(keras.layers.Dense(1, activation="softmax"))

softmax的作用是将多个输出神经元的结果归一化为总和为1的概率分布,当仅存在1个输出神经元时,运算后的值会固定为1,这就是所有预测结果全为1、损失全程无变化的根本原因。

修复方式:

回归任务输出层不需要激活函数,直接输出原始数值即可,修改为:

model.add(keras.layers.Dense(1))

如果预测值有明确的数值范围约束,也可根据实际场景选择sigmoid、relu等激活函数,禁止使用softmax。

核心错误2:评估指标选择错误

accuracy是分类任务专属的评估指标,要求预测值和真实值完全相等才会计为正确,对于回归任务的连续值输出,几乎不可能满足相等条件,因此你观测到的准确率恒为0属于指标选择错误导致的正常现象,不是模型训练问题。

修复方式:

编译模型时替换为回归任务常用的评估指标即可,比如平均绝对误差MAE:

model.compile(loss="mse", optimizer=optimizer, metrics=["mae"])

可选优化建议

  • 若序列规律和时序关联度高,可以将全连接层替换为LSTM、GRU等时序专用网络层,拟合效果会更好
  • 数据归一化操作需要先拆分训练集、验证集、测试集,再仅用训练集拟合StandardScaler,之后用拟合好的scaler去归一化验证集和测试集,不要提前对全量数据做归一化,会造成数据泄露
  • 输入层的全连接层可以显式声明输入维度,避免Keras自动推断异常:model.add(keras.layers.Dense(5, input_shape=(5,)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:57:03