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

如何构建符合指定输入输出形状的TensorFlow时间序列预测模型

适配方案说明

你需要调整模型的编解码结构,实现从过去10步输入到未来10步输出的映射,核心通过RepeatVector层完成时间步长度的匹配,具体修改如下:


核心修改逻辑

  • 把原有第二层LSTM的return_sequences参数改为False,得到输入序列编码后的全局特征向量
  • 新增RepeatVector(N_FUTURE)层,将全局特征向量复制为10份,匹配输出要求的10个时间步长度
  • 新增一层LSTM作为解码器,设置return_sequences=True,对每个时间步的特征做解码
  • 后续Dense层会自动作用在每个时间步上,输出对应时间步的预测值

修改后完整可运行代码

import tensorflow as tf

BATCH_SIZE = 32  # 建议不要修改该参数
N_PAST = 10  # 请勿修改该参数
N_FUTURE = 10  # 请勿修改该参数
SHIFT = 1 
N_FEATURES = 1 # 补充缺失的特征数定义

model = tf.keras.models.Sequential([
        # 编码器部分:处理过去10步输入
        tf.keras.layers.Conv1D(filters=32, kernel_size=5,
                               strides=1, padding="causal",
                               activation="relu",
                               input_shape=[N_PAST, N_FEATURES]), # 固定输入形状匹配你的要求
        tf.keras.layers.LSTM(64, return_sequences=True),
        tf.keras.layers.LSTM(64, return_sequences=False), # 关闭返回序列,得到全局编码向量
        
        # 适配输出时间步的核心层
        tf.keras.layers.RepeatVector(N_FUTURE), # 复制为10个时间步,匹配输出长度要求
        
        # 解码器部分:生成未来10步输出
        tf.keras.layers.LSTM(64, return_sequences=True), # 必须开启返回序列
        tf.keras.layers.Dense(30, activation="relu"),
        tf.keras.layers.Dense(10, activation="relu"),
        tf.keras.layers.Dense(N_FEATURES)
    ])

# 验证形状符合要求
model.build(input_shape=(BATCH_SIZE, N_PAST, N_FEATURES))
print(model.output_shape) # 输出为 (32, 10, 1),完全匹配需求

简化方案(适合简单时序场景)

如果不想新增额外LSTM层,可以直接在第二层LSTM(return_sequences=False)之后添加tf.keras.layers.Reshape((N_FUTURE, N_FEATURES))直接调整输出形状,不过预测效果会比编解码结构稍差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:11