【问题标题】:Stateful LSTM in Keras: reset with fit, evaluate, and predict?Keras 中的有状态 LSTM:使用拟合、评估和预测进行重置?
【发布时间】:2018-03-14 00:53:17
【问题描述】:

我想详细说明何时重置状态的问题。

Stateful LSTM: When to reset states?

假设我这样训练一个有状态模型:

for i in range(epochs):
    model.fit(X_train, y_train, epochs=1, batch_size=1, shuffle=False)
    model.reset_states()

我的训练集和测试集来自一个时间序列数据集,测试集紧跟在训练集之后。

接下来,我想评估测试集并获得预测数组。

score = model.evaluate(X_test, y_test, batch_size=1, verbose=True)

prediction = model.predict(X_test, batch_size=1)

我觉得在训练循环结束时重置模型状态会导致评估或预测步骤出错,至少在集合开始时是这样。是这样吗?如果数据继续按顺序进入测试集,我是否应该重置最后一个 epoch 的状态?

另外,在我对测试集进行评估之后,我是否需要在尝试预测之前将模型的状态恢复到训练集结束时的状态?我应该复制模型吗?保存并重新加载它?

【问题讨论】:

    标签: machine-learning deep-learning keras lstm stateful


    【解决方案1】:

    确实,如果您在评估测试集之前重置状态,它将假定测试序列是一个全新的序列。它将从头开始。如果整个序列的一般行为不随时间变化,那么误差可能不会太大。但我不会冒险。

    如果测试序列继续训练序列,那么它应该以适当的状态开始以获得最佳结果。

    但我会说你应该这样做:

    • 重置状态(这些状态受在最后一个 epoch 开始时仍未训练的权重影响)
    • 评估火车序列(以创建新的最新状态)
    • 评估测试序列

    然后是这个:

    • 重置状态(更改状态所需的评估)
    • 预测火车序列(再次创建状态)
    • 预测测试序列

    未回答:我不知道evaluate 方法是否会使状态恢复到以前的状态。但我相信不会。您可能需要评估足够长的序列以填满您的记忆,然后您必须分批评估。

    题外话:链接问题中的误解:

    在 keras 中,样本序列。循环层的批次尺寸为:

    • (sequences, timeSteps, features),其中序列数、样本数和批量大小完全相同。 (查看文档确认第二个维度是序列中的“步骤”:https://keras.io/layers/recurrent/

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2019-04-10
      • 2018-03-10
      • 2017-10-08
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多