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

如何用Keras构建特定多对多LSTM模型实现序列预测?

实现符合Karpathy第4种多对多RNN架构的Keras示例

首先,你之前的代码核心问题很明确:你把整个输入数组打包成了单个时间步(reshape(n_samples,1,5)),这导致LSTM完全没有利用序列的时间步信息,和普通MLP的逻辑没区别。要实现Karpathy提到的那种多对多架构(输入输出均为序列,且序列逻辑对应),核心要做两件事:

  • 将输入拆分为独立的时间步(每个元素作为一个时间步)
  • 让LSTM返回每个时间步的输出(而非仅最后一个时间步的输出)

步骤1:数据准备

假设你的输入样本是长度为4的数组(比如[1,2,3,5]),我们需要把每个元素作为单独的时间步,每个时间步对应1个特征。输出是输入的前两个元素,我们也将其整理为序列格式,适配多对多架构的要求:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, TimeDistributed, Lambda

# 生成训练样本
n_samples = 10000
# 输入:每个样本是长度为4的数组,数值范围5-9
input_data = np.random.randint(5, 10, (n_samples, 4))
# 输出:每个样本的前2个元素,转为序列形状(n_samples, 2, 1)
output_data = input_data[:, 0:2].reshape(n_samples, 2, 1)
# 输入转为多对多RNN要求的格式:(样本数, 时间步数, 特征数)
input_seq = input_data.reshape(n_samples, 4, 1)

步骤2:构建多对多RNN模型

这里我们用return_sequences=True让LSTM返回每个时间步的隐藏状态,再通过TimeDistributed包装Dense层,确保每个时间步都能生成对应的输出。最后用Lambda层截取前2个时间步的结果,匹配我们的目标输出长度:

model = Sequential()
# 第一层LSTM:处理4个时间步的输入,返回每个时间步的输出
model.add(LSTM(16, input_shape=(4, 1), return_sequences=True))
# TimeDistributed确保每个时间步都能通过Dense层得到输出
model.add(TimeDistributed(Dense(1)))
# 截取前2个时间步的输出,匹配目标序列长度
model.add(Lambda(lambda x: x[:, :2, :]))

# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')

# 查看模型结构,确认符合多对多逻辑
model.summary()

步骤3:训练与验证

# 训练模型
model.fit(input_seq, output_data, epochs=50, batch_size=500, verbose=1)

# 验证效果
test_input = np.array([[1,2,3,5]])
test_input_seq = test_input.reshape(1,4,1)
pred = model.predict(test_input_seq)
print(pred.reshape(1,-1))  # 输出应接近[1,2]

补充:严格匹配Karpathy同长度多对多架构

如果你需要完全对应Karpathy第4种输入输出序列长度一致的架构(比如输入4个时间步,输出4个时间步,仅关注前两个输出),只需要调整目标数据为长度4的序列,去掉Lambda层即可:

# 调整输出为长度4的序列,前2个是目标值,后2个可复用输入值
output_data_full = input_data.reshape(n_samples,4,1)
# 去掉Lambda层,模型输出4个时间步的结果,你只需关注前两个的预测

这样模型就真正利用了时间步的序列信息,符合多对多RNN的架构要求,不会再退化为MLP逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:54