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

时间:2017-10-02 21:46:43

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

我想扩展何时重置状态的问题。

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)

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

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

1 个答案:

答案 0 :(得分:5)

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

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

但我会说你应该这样做:

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

然后这个:

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

没有回答:我不知道declare @i date='10/3/2017' declare @Friday int=6 SELECT convert(varchar,dateadd(day,(@Friday-DATEPART(dw,@i)),@i) ,110) 方法是否会将州恢复到以前的状态。但我相信它不会。您可能需要评估足够长的序列以填满您的记忆,然后您必须批量评估。

偏离主题:关联问题中的误解:

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

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