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

如何训练LSTM架构预测数字序列?代码问题求助

问题分析与修正方案

核心问题

你的测试数据维度与模型输入要求不匹配:

  • 模型定义的input_shape=(3,3),要求每个输入样本的结构是 3个时间步,每个时间步包含3个特征,即输入张量形状必须是(batch_size, timesteps=3, features=3)。
  • 原测试代码中X_new被处理成(1,3),缺少特征维度,导致模型无法识别输入格式。

另外,训练数据的任务逻辑可以更清晰(明确用前3个时间步的序列预测下一个时间步的特征),下面给出适配该LSTM架构的完整修正代码:

修正后的完整代码

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

# 训练数据:每个样本是3个连续的时间步序列,每个时间步3个特征
# 任务逻辑:用前3个时间步的序列,预测第3个时间步的下一个时间步特征
X_train = np.array([
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]],    # 输入序列:时间步1-3
    [[4, 5, 6], [7, 8, 9], [10, 11, 12]], # 输入序列:时间步2-4
    [[10, 11, 12], [13, 14, 15], [16, 17, 18]], # 输入序列:时间步5-7
    [[13, 14, 15], [16, 17, 18], [19, 20, 21]]  # 输入序列:时间步6-8
])

# 对应训练标签:每个输入序列对应的"下一个"时间步特征
y_train = np.array([
    [10, 11, 12],  # 对应X_train第一个样本的下一个时间步
    [13, 14, 15],  # 对应X_train第二个样本的下一个时间步
    [19, 20, 21],  # 对应X_train第三个样本的下一个时间步
    [22, 23, 24]   # 对应X_train第四个样本的下一个时间步
])

# 初始化模型,保持原LSTM架构
model = Sequential()
model.add(LSTM(3, input_shape=(3, 3)))  # 输入形状匹配(时间步, 特征数)
model.add(Dense(3))  # 输出3个特征,与y_train维度一致
model.compile(loss="mean_squared_error", optimizer="adam")

# 训练模型
model.fit(X_train, y_train, epochs=200, batch_size=1)

# 测试数据:构造符合输入要求的样本(1个batch,3个时间步,3个特征)
X_new = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
print("测试输入形状:", X_new.shape)

# 预测
y_pred = model.predict(X_new)
print("预测结果:", y_pred)

关键修正点

  • 训练数据逻辑:明确序列预测任务,让X_train和y_train的对应关系更合理,同时增加训练样本数量提升模型拟合效果。
  • 测试数据形状:将X_new调整为(1, 3, 3),即1个batch、3个时间步、每个时间步3个特征,完全匹配模型的input_shape要求。
  • 输出层补充:显式添加Dense(3)输出层,符合序列预测的常规结构,避免潜在的维度匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:52:35