LSTM / GRU和使用重叠的滑动窗口

时间:2019-05-29 19:09:23

标签: tensorflow keras deep-learning lstm gated-recurrent-unit

上下文

我目前正在Keras中使用 LSTM / GRU 进行一些实验。无论如何,以下问题也与这些网络的一般功能有关,这意味着 答案不一定是针对Keras的

在我的实验中,我选择以range(10,105,5)的形式预测线性增长的时间序列,这样显然可以得到良好的结果。我的数据生成器遵循this教程(仅是Keras的TimeSeriesGenerator的实现)。

[[[10. 15.]
  [20. 25.]]] => [[30. 35.]]
...
[[[80. 85.]
  [90. 95.]]] => [[100. 105.]]

这将产生8 steps_per_epochshape (8, 1, 2, 2)的样本。 然后,我在Keras中建立了一个简单的网络,并通过500 epochs对其进行了培训:

model = Sequential() 
model.add(GRU(100, activation='relu', input_shape=(n_input, n_features), batch_size=1)) #Could also be a LSTM-layer
model.add(Dense(2)) #Following the target-shape
model.compile(optimizer='adam', loss='mse')

如果我以后能预测一些数据……

x_input = np.array([[90, 95], [100, 105]]).reshape((1, n_input, n_features))
yhat    = model.predict(x_input, verbose=0)

...结果/预测是[[111.1233 116.97075]](对于实验来说足够好->正确的是[[110.0 115.0]])。



我的问题

很明显,这需要500个纪元。

为了在不增加实际数据的情况下获得更多训练数据(在实际情况下,这也是不可能的),我想到了使用重叠的滑动窗口的想法(上面显示的批次是不重叠的)。

然后批次如下所示:

[[[10. 15.]
  [20. 25.]]] => [[30. 35.]]
[[[15. 20.]
  [25. 30.]]] => [[35. 40.]]
[[[20. 25.]
  [30. 35.]]] => [[40. 45.]]
...

从理论上讲,这对我来说意味着更多的批次,我认为培训质量将相应提高。

无论如何,将此数据馈送到同一网络会导致以下预测:[[121.1334 134.70979]]。嗯,这些预测结果差得多。

我的问题是:

  1. 这是LSTM / GRU的预期行为吗?为什么重叠窗口对他们来说是个问题?
  2. 有没有办法在不破坏预测质量的情况下增加数据?

0 个答案:

没有答案