python - 为什么我们需要重塑 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.我们如何重塑它?我们将成为什么新维度?
解决方案
不确定 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)
推荐阅读
- r - 在 tidyverse 工作流程的 R 部分使用 step 函数,特别是使用 nest 和 map 函数
- google-analytics - Analytics v4 更新后如何使用 webDataStream 从 Analytics Reporting Api 获取数据?
- javascript - 如何更改提供文本格式?
- image-processing - 除了使用 OpenCV python 的 bean 之外,有没有办法可以删除图像中的其他组件?
- r - 如何按日期对只有 R 的月份和日期的列进行排序?
- apache-spark - 使用 Spark 和 Jupyter Notebook 过滤、映射数据集中的问题
- google-cloud-platform - Cloud Sql 代理私有 IP 外部应用程序
- google-chrome - iframe 历史导航在 Chrome 中不起作用
- mysql - 如何使用mysql通过查询将逗号分隔的值拆分为多行
- javascript - Keycloak - 使用管理 API 通过循环向用户添加客户端角色