如何在 Keras 中使用 model.reset_states()?

How to use model.reset_states() in Keras?

我有顺序数据,我声明了一个 LSTM 模型,该模型在 Keras 中预测 yx。因此,如果我调用 model.predict(x1)model.predict(x2),在两个 predict() 之间显式调用 model.reset_states 是否正确? model.reset_states 清除输入的历史记录,而不是权重,对吗?

# data1
x1 = [2,4,2,1,4]
y1 = [1,2,3,2,1]

# dat2
x2 = [5,3,2,4,5]
y2 = [5,3,2,3,2]

而在我的实际代码中,我使用 model.evaluate()。在 evaluate() 中,是否为每个数据样本隐式调用 reset_states

model.evaluate(dataX, dataY)

reset_states 仅清除网络的隐藏状态。值得一提的是,根据您的网络中是否设置了选项 stateful=True - 此函数的行为可能会有所不同。如果未设置 - 在您的网络中每次批处理计算后,所有状态都会自动重置(例如,在调用 fitpredictevaluate 之后)。如果不是 - 当您想独立进行连续的模型调用时,您应该每次都调用 reset_states

如果您明确使用以下之一:

model.reset_states() 

重置模型中所有层的状态,或

layer.reset_states() 

重置特定有状态 RNN 层(也是 LSTM 层)的状态,实现 here:

def reset_states(self, states=None):
  if not self.stateful:
     raise AttributeError('Layer must be stateful.')

这意味着您的层必须是有状态的。

在 LSTM 中你需要:

  • 通过将 batch_size 参数传递给模型中的第一层或 batch_input_shape 参数

    [=43,明确指定您正在使用的批量大小=]
  • 设置stateful=True.

  • 调用时指定shuffle=False fit().


可能最好地解释了使用有状态模型的好处 here