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

如何将1维y_train重塑为(62796,20,1)适配LSTM的return_sequences=True

解决方案:生成序列式目标数据适配LSTM的return_sequences=True

首先得明确:你不能直接把现有的一维y_train重塑成(62796,20,1)——当前的y_train每个样本只对应单值标签(输入窗口后的下一个数据点),而你需要的是每个输入窗口对应的连续20个后续数据点作为序列目标。核心要修改的是数据集生成逻辑,而非单纯的数组重塑。

重构数据集生成函数

我们可以重写create_dataset函数,让它生成序列形式的目标值,具体代码如下:

import numpy as np

def create_sequence_dataset(signal_data, look_back=1, target_length=1):
    dataX, dataY = [], []
    # 计算可生成的有效样本数:总长度 - 输入窗口长度 - 目标序列长度 + 1
    max_sample_idx = len(signal_data) - look_back - target_length + 1
    for i in range(max_sample_idx):
        # 输入窗口:取i到i+look_back的连续数据
        dataX.append(signal_data[i:(i + look_back), 0])
        # 目标序列:取输入窗口结束后连续target_length长度的数据
        dataY.append(signal_data[(i + look_back):(i + look_back + target_length), 0])
    return np.array(dataX), np.array(dataY)

应用到你的训练数据

用新函数生成符合要求的训练/测试数据,再调整维度适配LSTM输入输出格式:

look_back = 20
target_length = 20  # 目标序列长度和输入窗口长度保持一致

# 生成序列式的训练、测试数据集
x_train, y_train = create_sequence_dataset(train, look_back, target_length)
x_test, y_test = create_sequence_dataset(test, look_back, target_length)

# 调整输入数据维度为LSTM要求的[样本数, 时间步长, 特征数]
x_train = x_train.reshape(x_train.shape[0], look_back, 1)
x_test = x_test.reshape(x_test.shape[0], look_back, 1)

# 调整目标数据维度为[样本数, 时间步长, 特征数],适配return_sequences=True的输出
y_train = y_train.reshape(y_train.shape[0], target_length, 1)
y_test = y_test.reshape(y_test.shape[0], target_length, 1)

# 验证形状:此时x_train和y_train都会是(N,20,1)的三维数组
print(x_train.shape, y_train.shape)

关键说明

  1. 样本数变化:因为需要为每个输入窗口预留target_length长度的目标序列,所以总样本数会比原来的62796少,这是正常且合理的。
  2. 适配return_sequences=True:当LSTM启用该参数时,会输出每个时间步的隐藏状态(形状为[样本数, 时间步长, 隐藏单元数]),此时目标数据必须是对应每个时间步的序列,才能计算序列到序列的损失,保证模型训练逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:53:09