多输入多输出的Keras模型中的维数不匹配

Dimensionality mismatch in Keras Model with multiple input multiple output

提问人:Artem Nazarenko 提问时间:11/17/2023 最后编辑:Artem Nazarenko 更新时间:11/17/2023 访问量:15

问:

我有一个数据集(表格形式),其中包含 192 行和 24 列。我的目标是将此数据集用作训练数据集,以预测(回归)未来几个步骤中每列的 24 个值。下图代表了这个想法:

enter image description here

如前所述,数据集有 192 行和 24 列。这个想法是使用 20 个步骤/样本(行)来预测接下来的 5 个步骤(行)。我将跳过初始数据预处理和加载的部分,并将在归一化阶段进行分层:

df_training = scaler.fit_transform(df_training)
print(df_training.shape[0], df_training.shape[1])

输出维度符合预期 (192, 24)。然后,我准备要提供给 Keras 模型的数据集。目标是拥有维度为 168、20、24 的X_train数据集(20,见图,是用于进行预测的步数)和y_train维度为 168、5、24 的数据集(5,见图,是需要预测的步数):

def split_series(series, n_past, n_future):


  X, y = list(), list()
  for window_start in range(len(series)):
      past_lim = window_start + n_past
      future_lim = past_lim + n_future
      if future_lim > len(series):
          break
      past, future = series[window_start:past_lim, ], series[past_lim:future_lim, ]
    
      X.append(past)
      y.append(future)
  return np.array(X), np.array(y)

然后,我应用该函数来获取X_train并y_train:

X_train, y_train = split_series(df_training, 20, 5)

这导致维度 168,20,24 的X_train和维度 168,5,24 的y_train。 然后我进行重塑:

X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], X_train.shape[1]))
y_train = y_train.reshape((y_train.shape[0], y_train.shape[1], y_train.shape[2]))

输出为 168、24、20 和 168、24、5。 之后,我为 Keras 模型设置了输入和输出维度:

inp_dim = (X_train.shape[1], X_train.shape[2])
out_dim = y_train.shape[2]

结果是 (24,20) 和 (24)。 在下一步和最后一步中,我启动了训练过程(我计划使用 LSTM,因为它在处理回归相关问题时表现良好。该模型不是很先进,这里只是为了演示目的):

# create and fit the LSTM network
model = Sequential()
model.add(LSTM(64, input_shape = (inp_dim), activation="relu"))
model.add(Dense(24))
model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

model.fit(X_train, y_train, epochs=100, batch_size=5, verbose=0)

这会导致错误:

Incompatible shapes: [3,5,24] vs. [3,24]
 [[{{node mean_squared_error/SquaredDifference}}]] [Op:__inference_train_function_39943]

我假设我在尺寸方面有一些问题。我发现了很多教程,解释了如何根据多个输入或单个输入/单个输出情况仅预测一个值。但是我仍然在努力理解如何在多输入/多输出的情况下正确管理维度。我将不胜感激任何调整尺寸的帮助和建议。先谢谢你!

Python TensorFlow 机器学习 Keras

评论


答: 暂无答案