为什么我们需要重塑LSTM的输入?

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

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

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

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

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

X,              y10, 20, 30      4020, 30, 40      5030, 40, 50      60...

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

从 [样本数, 时间步长] 重塑为 [样本数, 时间步长, 特征数]

1. 为什么需要这样做?

另外,如果我的输入类似于(基本示例 + ID列):

ID    X,                y1     10, 20, 30        401     20, 30, 40        502     30, 40, 50        602     40, 50, 60,       70...

2. 我们如何重塑它?新的维度会是什么?


回答:

我认为 这个 链接将帮助你理解为什么需要这样做。

你总是需要给LSTM网络提供一个三维数组作为输入。其中第一维代表批量大小,第二维代表你输入序列的时间步长,第三维代表一个输入序列中的单元数量。例如,输入形状看起来像 (批量大小, 时间步长, 序列长度)

让我们以你的示例序列为例:[10, 20, 30, 40, 50, 60, 70, 80, 90]

一旦我们按照文章中提到的进行序列拆分,我们得到一个形状为 (6, 3) 的二维特征向量X。其中6是样本数量,3是步长数量。

但是,考虑到模型只能接受三维向量,我们必须将我们的二维向量重塑为三维向量。

因此从 (6, 3) 变为 (6, 3, 1)。

为了回答你的第二个问题,你可以简单地通过以下方式重塑你的二维特征向量X:

# 假设X是一个numpy数组samples = X.shape[0]steps = X.shape[1]X = X.reshape(samples, steps, 1)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注