Keras中的状态LSTM:是否可以拟合,评估和预测?

Tro*_*y D 1 machine-learning stateful deep-learning lstm keras

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

有状态的LSTM:何时重置状态?

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

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

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

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

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

prediction = model.predict(X_test, batch_size=1)
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*ler 5

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

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

但我说你应该这样做:

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

然后这个:

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

没有回答:我不知道该evaluate方法是否会将状态恢复到以前的状态。但是我确实相信不会。您可能需要评估足够长的序列以填满您的内存,然后必须分批评估。

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

在喀拉拉邦,样品序列。循环图层的批次尺寸为:

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