如何用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
相关产品推荐
相关产品推荐

