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

如何用Keras函数式API实现多输出LSTM时间序列预测?

解决Keras多输出LSTM预测的报错与双特征输出问题

咱们先把报错的根源说清楚:你的模型只有一个输入张量(通过Input((train_X.shape[1],train_X.shape[2]))定义的单输入),但你调用model.predict()时传了两个数组[pred_X,pred_Y],这和模型期待的输入数量完全不匹配,所以才会抛出那个ValueError。

接下来分两步帮你搞定问题:

1. 先修正预测调用的代码

直接把预测代码改成只传入模型定义好的输入pred_X就行:

ypred = model.predict(pred_X)

这么改之后,模型会返回一个包含两个NumPy数组的元组——第一个数组对应out1的预测结果,第二个对应out2的,正好是你想要的双特征预测输出。你可以直接拆分使用:

y_pred1, y_pred2 = ypred
# y_pred1 对应第一个待预测特征,形状是 (672, 1)
# y_pred2 对应第二个待预测特征,形状也是 (672, 1)

2. 再确认你的数据逻辑是否匹配模型

你提到“数据有6列,前两列为待预测特征,其余为输入特征”,但当前train_X是包含全部6列的(24576, 192, 6)。这里要分两种情况:

  • 如果你的逻辑是用后4列输入特征,预测前2列的目标值:那你需要把训练输入调整为只取后4列,代码如下:
    # 提取train_X的后4列作为输入特征
    train_X = train_X[:, :, 2:]
    # 对应的pred_X也要做同样处理
    pred_X = pred_X[:, :, 2:]
    # 然后重新定义模型输入(现在输入维度是192步,4特征)
    inp = Input((train_X.shape[1], train_X.shape[2]))
    
  • 如果你的逻辑是用包含待预测特征的全部6列历史数据,预测未来的两个待预测特征值:那当前的train_X和模型结构完全没问题,只需要用上面修正后的预测代码就行。

补充说明

你的模型编译和训练代码是对的:model.fit(train_X,[y1,y2])传入两个标签数组,完全符合多输出模型的训练要求。只要输入正确,预测阶段模型肯定会返回两个输出结果,不需要改模型结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:42