【问题标题】:How to use model.reset_states() in Keras?如何在 Keras 中使用 model.reset_states()?
【发布时间】:2017-03-13 12:43:25
【问题描述】:

我有顺序数据,我声明了一个 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)

【问题讨论】:

    标签: keras neural-network deep-learning sequence lstm


    【解决方案1】:

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

    【讨论】:

    • 我明白了。如果我没有设置有状态选项(所以 default=false),我不需要调用 reset_states,对吗?你能告诉我应该使用 stateful=True 什么样的情况?
    • 是的,你是对的。 stateful=True 通常用于将连续批次视为连续输入时。在这种情况下,模型对后续批次的处理方式与在同一批次中的处理方式相同。
    • @MarcinMożejko 在每批训练后清除隐藏状态时模型如何学习? clear 在这里是什么意思?
    【解决方案2】:

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

    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 参数来明确指定您正在使用的批量大小

    • 设置stateful=True

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


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

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 2019-08-21
      • 2019-04-15
      • 2017-12-29
      • 2018-06-30
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多