首页 > 解决方案 > 为什么我们需要重塑 LSTM 的输入?

问题描述

我读了这篇关于 LSTM 的文章:

https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/

第一个基本示例是关于“Vanilla LSTM”:预测下一个时间序列

其中输入 =[10, 20, 30, 40, 50, 60, 70, 80, 90]

在文章中,作者将输入(序列)拆分为矩阵:

X,              y
10, 20, 30      40
20, 30, 40      50
30, 40, 50      60
...

我不明白为什么输入需要重塑:

reshape from [samples, timesteps] into [samples, timesteps, features]

1. 为什么我们需要这个?

另外,如果我的输入是这样的(基本示例 + ID 列):

ID    X,                y
1     10, 20, 30        40
1     20, 30, 40        50
2     30, 40, 50        60
2     40, 50, 60,       70
...

2.我们如何重塑它?我们将成为什么新维度?

标签: pythonmachine-learningscikit-learndeep-learninglstm

解决方案


不确定 ID 来自哪里,但对于 Keras 中的 LSTM 网络,您需要输入是 3 维的。

最初,您将二维矩阵作为输入,其中每一行都是一个时间戳,因此
[samples, timesteps]

但是由于输入预计是 3 维的,因此您将其重塑为[samples, timesteps, 1]. 此处1指示您在数据中拥有的特征或变量的数量。由于这是一个单变量时间序列(您只有 1 个变量的序列)n_features 为 1。

这可以很容易地通过np_array.reshape(np_array.shape[0], np_array.shape[1], 1)


推荐阅读