You need to enable JavaScript to run this app. 基于Keras的多参数LSTM时间序列模型训练出现Loss Nan求助
优惠活动
大模型
产品
解决方案
定价
更多

基于Keras的多参数LSTM时间序列模型训练出现Loss Nan求助

LSTM时间序列模型高维输入触发loss为nan问题

场景说明

作为TensorFlow与Keras使用新手,在训练时间序列LSTM模型时发现:仅使用少量参数做测试时模型运行状态正常,但一旦将输入参数提升至完整的17010个,模型几乎立刻出现 loss: nan 异常。
输入数据已完成归一化处理,取值范围落在0到1之间,几乎不存在显著异常值,各参数的时序曲线形态可参考附图。

注意:输入数据集存在大量缺失值,由于模型的预测目标是相对前一时间步(1天)的涨跌幅百分比,即 y[i] > 0.5 对应上涨、y[i] < 0.5 对应下跌,因此将所有缺失值统一填充为 0.5。

网络配置规格

当前网络核心参数配置如下:

  • 训练样本(对应时间步总数):9835
  • 输入参数维度:17010
  • 输入序列长度:30
  • 输出参数维度:1
  • 输出序列长度:1
    整体来看,通过TimeseriesGenerator生成的输入序列整体shape为 (30, 17010, 9835),已在32到256区间内调整不同batch size开展测试。

已尝试的排查与调整操作

  • 降低dropout率
  • 梯度裁剪(考虑到所有输入值均落在0-1区间,原本认为该操作对当前场景没有必要)
  • 排查所有输入数据是否存在NaN或Inf值
  • 增大batch size
  • 降低学习率
  • 将输入参数数量缩减至3406
    查阅到的关于网络合适层数与单元数的参考信息存在冲突,也已在32到2000区间内调整不同的隐藏单元数开展测试。

当前实现代码

使用 keras.preprocessing.sequence.TimeseriesGenerator 分别构建训练集与验证集,核心实现逻辑如下:

dataset_train = keras.preprocessing.sequence.TimeseriesGenerator(
    x_train,
    y_train,
    length=past,
    batch_size=batch_size,
)
model = Sequential()
model.add(LSTM(hidden_units, return_sequences=False, activation='relu', input_shape=(past, dataset_train.data.shape[1])))
model.add(Dropout(0.2))
model.add(Dense(hidden_units))
model.compile(optimizer=keras.optimizers.Adam(learning_rate=learning_rate), loss="mse")

path_checkpoint = "model_checkpoint.h5"
es_callback = keras.callbacks.EarlyStopping(monitor="val_loss", min_delta=0, patience=5)
model.summary()
modelckpt_callback = keras.callbacks.ModelCheckpoint(
    monitor="val_loss",
    filepath=path_checkpoint,
    verbose=1,
    save_weights_only=True,
    save_best_only=True,
)

history = model.fit(
    dataset_train,
    epochs=epochs,
    validation_data=dataset_val,
    callbacks=[es_callback, modelckpt_callback, PlotLossesKeras()],
)

现存疑问

目前无法确定当前异常是因训练样本量较少、无法支撑高维输入参数的模型训练所致,还是其他诱因引发,希望获得针对性的优化指导。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 19:57:03