首页 > 解决方案 > 关于 LSTM 输入中使用的术语的问题 - seq_length vs context_size 用于滑动窗口方法

问题描述

我有一个n向量序列的时间序列,我需要使用滑动窗口方法将其馈送到 LSTM。

在我在线阅读的不同资源中,seq_length通常称为窗口长度[或 LSTM 单元的数量],并context_size定义为 LSTM 在一个时间步长的输入大小。(例如,一个时间步长一个输入向量)。

在任何给定的时间点t,我想将点x_{tm}, ..., x_{t-1},...,x_{t}传递给 LSTM,然后是密集层,并在每个 tilmestep 处预测分类目标属性。

如果我想遵循滑动窗口方法,是否需要将输入数据显式拆分为大小为m的窗口?

例如:

[x_{tm}, ..., x_{t-1},...,x_{t}], [x_{t-m+1}, ..., x_{t},...,x_{t+1}], [x_{t-m+2}, ..., x_{t+1}, x_{t+2}]等。

或者,我可以将输入数据拆分为不重叠的块[x_{tm}, ..., x_{t-1},...,x_{t}], [x_{t+1}, ..., x_{t+ m-1},x_{t+m}]等,而是调整 context_size 的大小?

     embeds = embeds.unfold(1, context_size, 1)  # Keeping the step size to be 1
     embeds = embeds.view(embeds.size(0), embeds.size(1), -1)

有没有更好的方法来实现时间序列数据的滑动窗口方法?

标签: pythonlstmpytorch

解决方案


默认情况下,LSTM 在数据上递归,因为时间 t 的预测将取决于所有过去(取决于内存)。在这种情况下,您似乎希望时间 t 的输入取决于过去的 m+1 个实例。如果是这样,您不需要循环网络,您可以简单地使用线性并在每个时刻输入滑动窗口。但是,如果您使用的是循环网络,则不需要一次又一次地传递相同的输入。


推荐阅读