我有一个 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}] 等。
或者,我可以将输入数据拆分为不重叠的块吗[em_ [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)
是否有更好的方法来实现时间序列数据的滑动窗口方法?
答案 0 :(得分:0)
LSTM对数据进行递归,因为时间t的预测将取决于所有过去(取决于内存)。在这种情况下,您似乎希望时间t的输入依赖于过去的m + 1个实例。如果不需要循环网,则可以简单地使用线性,并在每个瞬间输入滑动窗口。但是,如果您使用的是递归网络,则无需一次又一次地传递相同的输入。