【问题标题】:Can I change the statefulness of RNN after training?我可以在训练后更改 RNN 的状态吗?
【发布时间】:2019-10-16 10:49:36
【问题描述】:

如果我使用 stateful=False 构建和训练基于 RNN 的模型,我可以简单地做(例如):

model.layers[0].stateful = True

它是否如预期的那样在预测中发挥作用?我问是因为在其他情况下(例如学习率),暴露的参数是“表面的”,实际上并不影响行为。

【问题讨论】:

  • @xskxzr 你测试过这个方法吗?您是否尝试使用 stateful=False 拟合模型并进行预测,然后设置 stateful=True 并进行预测?两种情况下的预测是否相等?

标签: machine-learning keras recurrent-neural-network tf.keras


【解决方案1】:

如果您的模型不是有状态的,模型会在每批后重置状态变量。您可以创建有状态模型,但在预测中使用回调(on_batch_end 回调后的 model.reset_states)在每个批次之后手动重置状态变量。

另外,为什么要在训练后改变状态?

【讨论】:

  • 我正在对我的模型进行完整序列的训练,但在应用程序中,我将一次给它一个样本。我有点不清楚有状态在训练期间做了什么,但我认为它会保持批次之间的状态,这是我不想要的。
  • 确切地说,“stateful=True”允许您保持批次之间的状态。否则,将在每批后重置。如果您希望模型的状态变量记住长期依赖关系,则状态性很有用。
猜你喜欢
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2017-03-11
  • 2021-02-22
  • 2019-12-16
  • 2018-10-13
相关资源
最近更新 更多