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

Keras搭建的LSTM模型验证准确率为0且损失为nan,该如何排查解决?

问题根因
  • 最后一层激活函数与输出单元数不匹配:你最后一层全连接层仅配置1个单元,却使用softmax激活函数。softmax会将所有输出单元的结果归一化为总和为1的概率分布,单单元场景下无论输入是什么,输出永远为1,完全无法输出有效分类结果,直接导致准确率恒为0。
  • 损失函数与任务场景不匹配:当前使用的sparse_categorical_crossentropy是多分类任务专用损失函数,要求输出单元数对应分类数量(至少为2),和1个输出单元的场景完全不契合,会导致损失计算逻辑错误。
  • 损失计算异常触发nan:损失计算逻辑错误会直接导致梯度计算异常,出现梯度爆炸/消失,最终loss变为nan,模型完全无法学习,所以训练和验证的准确率始终为0。
解决思路

根据你的任务类型选择对应修改方案:

  • 若为二分类任务:
    1. 将最后一层的激活函数从softmax改为sigmoid
    2. 将损失函数从sparse_categorical_crossentropy改为binary_crossentropy
  • 若为回归任务:
    1. 去掉最后一层的激活函数,直接使用默认线性输出
    2. 将损失函数改为mean_squared_error,评估指标更换为MAE等回归类指标,无需使用准确率
  • 额外优化项:
    1. 确认输入特征是否做了归一化处理,未归一化的特征也容易触发梯度异常导致loss为nan
    2. 可将Dropout比例调整到0.2-0.3区间,当前0.02的Dropout几乎没有正则效果
    3. 修改后如果依然出现nan,可在优化器配置中添加梯度裁剪参数clipnorm=1.0,避免梯度爆炸
    4. 检查标签数据是否存在空值、超出合理范围的异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:03