我正在使用 Keras 构建一个用于时间序列预测的 LSTM,但我希望模型以小批量 (windows) 进行训练并在线进行预测,如此处所述。这是因为数据一次在一个数据记录中流式传输。例如,窗口大小为 500 时,在时间步长 500 时,模型将在步骤 1-500 上进行训练,现在将尝试预测 501,然后是 502、503 等。模型在时间步长 1000 之前不会再次训练。
但结果是奇数的,其中预测值随着每个训练窗口的增加而增加,如此图所示。关于这里有什么问题的任何想法?
我有一个小架构:
layers = {'input': inputDims, 'hidden1': 35, 'hidden2': 35, 'output': 1}
model = Sequential()
model.add(LSTM(
input_length=self.sequenceLength,
input_dim=self.layers['input'],
output_dim=self.layers['hidden1'],
return_sequences=True)
model.add(Dropout(0.2))
model.add(LSTM(
self.layers['hidden2'],
return_sequences=False)
model.add(Dropout(0.2))
model.add(Dense(output_dim=self.layers['output']))
self.model.add(Activation('linear'))
model.compile(loss='mse', optimizer='rmsprop')
这可能不是您的特定实现的问题,而是具有长时间序列的 LSTM 概念问题的化身。一个很好的起点是论文"学会遗忘:使用 LSTM 进行持续预测"。特别是,提交人指出,
[...]甚至LSTM也无法学会正确处理某些很长的时间 或不是先验分割的连续时间序列 适当的训练子序列
而那
[...]细胞状态SC通常倾向于在 时间序列的呈现 [...]