如何在 Keras 中使用 model.reset_states()?
How to use model.reset_states() in Keras?
我有顺序数据,我声明了一个 LSTM 模型,该模型在 Keras 中预测 y
和 x
。因此,如果我调用 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
- 此函数的行为可能会有所不同。如果未设置 - 在您的网络中每次批处理计算后,所有状态都会自动重置(例如,在调用 fit
、predict
和 evaluate
之后)。如果不是 - 当您想独立进行连续的模型调用时,您应该每次都调用 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。
我有顺序数据,我声明了一个 LSTM 模型,该模型在 Keras 中预测 y
和 x
。因此,如果我调用 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
- 此函数的行为可能会有所不同。如果未设置 - 在您的网络中每次批处理计算后,所有状态都会自动重置(例如,在调用 fit
、predict
和 evaluate
之后)。如果不是 - 当您想独立进行连续的模型调用时,您应该每次都调用 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 中你需要:
通过将
[=43,明确指定您正在使用的批量大小=]batch_size
参数传递给模型中的第一层或batch_input_shape
参数设置
stateful=True
.调用时指定
shuffle=False
fit()
.
可能最好地解释了使用有状态模型的好处 here。