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

LSTM二分类讽刺检测模型出现NaN损失的原因排查

问题分析与解决方案

1. LSTM层参数使用错误(最可能的直接原因)

你的LSTM层写法存在致命问题:

model.add(LSTM(lstm_out1, Dropout(0.2), Dropout(0.2)))

LSTM层的参数中不能直接传入Dropout层实例,这种写法会破坏模型的计算逻辑,直接导致输出NaN。正确的实现方式有两种:

修正方式一:使用LSTM内置的 dropout 参数

model.add(LSTM(lstm_out1, dropout=0.2, recurrent_dropout=0.2))

修正方式二:将Dropout作为独立层添加

model.add(LSTM(lstm_out1))
model.add(Dropout(0.2))

2. 嵌入矩阵embed_matrix存在NaN值

你仅检查了原始文本和标签的缺失值,但未验证预训练嵌入矩阵的合法性。添加以下代码排查:

import numpy as np
print(np.isnan(embed_matrix).any())

如果结果为True,说明嵌入矩阵存在无效值,需要重新生成矩阵,或用0、词向量均值填充这些NaN。

3. 输入序列存在非法索引

文本转成的整数序列可能存在超出词汇表范围的数值,导致Embedding层输出异常。检查输入特征的最大值:

print(np.max(X_train))  # X_train为你的输入特征矩阵

若最大值大于vocab_size-1,需重新处理文本序列,确保所有索引都在合法范围内。

4. 数值溢出问题

即便做了梯度裁剪和学习率调整,仍可能因模型结构或数据分布导致数值溢出。可尝试:

  • 减小LSTM单元数量(比如将lstm_out1从128降至64)
  • 在Dense层后加入BatchNormalization层稳定数值分布:
model.add(Dense(64, activation='relu'))
model.add(BatchNormalization())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:21