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

深度学习RNN(LSTM)模型损失值为inf的解决方法求助

训练损失为inf的解决办法

1. 排查标签数据异常

Jaccard相似度理论范围是[0,1],但计算时可能因分母为0出现inf,或者数值溢出。

  • 打印标签统计值确认:
    import numpy as np
    print(np.min(y), np.max(y), np.isinf(y).any(), np.isnan(y).any())
    
  • 若发现异常,过滤对应样本,或把标签限制在0-1区间:y = np.clip(y, 0, 1)

2. 调整权重初始化策略

当前偏置初始化用了均值0.5、标准差1的随机分布,容易让初始输出值过大,直接导致损失溢出:

  • 降低初始化标准差,比如改成0.01,或用更稳定的初始化方式:
    initializer = tf.keras.initializers.RandomNormal(mean=0., stddev=0.01)
    # 或者用默认的glorot均匀初始化
    model.add(Dense(256, activation='linear', kernel_initializer='glorot_uniform'))
    
  • 去掉自定义偏置初始化,用默认的零初始化,避免初始偏置值过高。

3. 优化模型结构

第一个Dense层用线性激活,加上大尺寸LSTM输出,容易引发数值爆炸:

  • 把第一个Dense层的激活函数改成tanh,限制输出范围:
    model.add(Dense(256, activation='tanh', kernel_initializer='glorot_uniform'))
    
  • 缩小LSTM单元数,比如把512降到256,降低模型复杂度,减少数值波动。

4. 调整训练参数

学习率1e-6过小,导致权重更新缓慢,初始阶段损失无法收敛:

  • 把学习率调到1e-4或1e-5,Adam优化器在这个区间表现更稳定。
  • 减小batch_size到16或8,降低单批次内的数值波动,避免极端样本拉爆损失。
  • 添加梯度裁剪,防止梯度爆炸:
    optimizer = tf.keras.optimizers.Adam(learning_rate=1e-4, clipvalue=1.0)
    model.compile(optimizer=optimizer, loss='mean_absolute_error', metrics=['mean_squared_error'])
    

5. 优化损失计算稳定性

MAE对大误差敏感,初始阶段输出和标签差距过大容易溢出:

  • 先换MSE损失训练几轮,等损失稳定后再换回MAE,MSE对极端值的容忍度更高。
  • 给标签做微小缩放,比如y = y * 0.99,避免模型输出触及数值边界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:27:39