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

LSTM模型输入形状不匹配警告及预测输出异常问题求助

LSTM预测输入形状不匹配问题分析与解决

问题背景

我拥有维度为(17544, 1)的小时级电力消耗时序数据,目标是用过去7天(168小时)的数据预测未来24小时的消耗。训练数据预处理和模型构建完成后,用(168,1)的外部数据验证时,输出形状为(168,24),且收到输入形状不匹配的警告:

WARNING:tensorflow:Model was constructed with shape (None, 168, 1) for input KerasTensor(type_spec=TensorSpec(shape=(None, 168, 1), dtype=tf.float32, name='lstm_3_input'), name='lstm_3_input', description="created by layer 'lstm_3_input'"), but it was called on an input with incompatible shape (None, 1, 1).


核心问题:输入数据形状不符合模型预期

模型训练时,输入的X_train形状是(样本数, 168, 1),三个维度分别代表:

  • 第一个维度:样本数量
  • 第二个维度:时间步长(168小时)
  • 第三个维度:特征数(1)

但你用于预测的(168,1)数据,直接传入模型时,TensorFlow会默认解析为(168, 1, 1)——即168个独立样本,每个样本仅包含1个时间步、1个特征,完全不符合模型要求的输入格式。


错误表现对应

  • 输入形状警告:模型期望输入为(None, 168, 1),实际传入的是(None, 1, 1)
  • 异常输出形状:模型把每个单时间步数据当成独立样本,输出了168组各24个预测值,而非预期的1组24个预测值

解决方法:调整预测输入的形状

需要将(168,1)的输入数据重塑为(1, 168, 1),即1个样本,包含168个时间步、1个特征。具体代码如下:

import numpy as np

# 假设你的验证输入数据是test_input,形状为(168,1)
test_input = np.array([[17.6], [38.2], ..., [46.1]])

# 重塑输入形状为(1, 168, 1)
test_input_reshaped = np.reshape(test_input, (1, test_input.shape[0], 1))

# 执行预测
predictions = model.predict(test_input_reshaped)

# 提取24个预测值,此时predictions形状为(1,24)
predicted_values = predictions[0]

额外优化:修正数据集生成函数的循环条件

你的Create_Dataset函数循环条件range(lookback, len(df)-lookback)存在数据浪费问题,无法利用数据集的最后部分数据。正确的循环条件应确保每个样本能对应完整的预测窗口:

def Create_Dataset(df, lookback=1, prediction_horizon=1):
    X, Y = [], []
    # 修改循环终止条件,确保能取到最后一组有效样本
    for i in range(lookback, len(df) - prediction_horizon + 1):
        X.append(df[i-lookback : i, 0])
        Y.append(df[i : i + prediction_horizon, 0])
    return np.array(X), np.array(Y)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:50:26