【问题标题】:LSTM predictions increase with each training batchLSTM 预测随着每个训练批次而增加
【发布时间】:2016-07-14 02:27:15
【问题描述】:

我正在使用 Keras 构建一个 LSTM 用于时间序列预测,但我希望模型能够在小批量(窗口)中进行训练并在线进行预测,如 here 所述。这是因为数据一次在一个数据记录中流式传输。例如,窗口大小为 500,在时间步长 500 处,模型将在步骤 1-500 上进行训练,现在将尝试预测 501,然后是 502、503,依此类推。该模型在时间步长 1000 之前不会再次训练。

但结果很奇怪,预测值随着每个训练窗口的增加而增加,如this plot 所示。关于这里有什么问题的任何想法?

我有一个小型架构:

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')

【问题讨论】:

    标签: keras lstm


    【解决方案1】:

    这可能不是您的具体实现的问题,而是具有长时间序列的 LSTM 概念问题的体现。一个很好的起点是论文Learning to forget: Continual prediction with LSTM。 特别是,作者观察到

    [...] 甚至 LSTM 也未能学会正确处理某些很长时间 或不是先验分割成的连续时间序列 适当的训练子序列

    还有那个

    [...] 细胞状态 sc 通常在 时间序列的呈现[...]

    【讨论】:

    • 啊,这是一个很好的观点,谢谢。我将尝试在数据流中的各个点重置模型的状态。我还可以使用 Keras 构建一个有状态的 LSTM 模型,这可能在这里运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2017-11-02
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多