Keras 中的有状态 LSTM:通过拟合、评估和预测进行重置?

Stateful LSTM in Keras: reset with fit, evaluate, and predict?

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

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 的状态?

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

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

如果测试序列是训练序列的延续,那么它应该从正确的状态开始以获得最佳结果。

但我会说你应该这样做:

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

然后是这个:

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

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

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

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

  • (sequences, timeSteps, features),其中序列数、样本数和batch size是一回事。 (查看文档确认第二个维度是"steps"的序列:https://keras.io/layers/recurrent/