tensorflow - Keras - 有状态 LSTM 与无状态 LSTM

标签 tensorflow deep-learning keras lstm

我很难概念化 Keras 中有状态 LSTM 和无状态 LSTM 之间的区别。我的理解是,在每个批处理结束时,在无状态情况下“网络状态被重置”,而对于有状态情况,网络状态会为每个批处理保留,然后必须在每个纪元的结束。

我的问题如下: 1. 在无状态的情况下,如果批处理之间不保留状态,网络将如何学习? 2. 什么时候使用 LSTM 的无状态模式和有状态模式?

最佳答案

我建议您首先学习BPTT(Back Propagation Through Time)和小批量SGD(Stochastic Gradient Descent)的概念,然后您将对LSTM的训练过程有进一步的了解。

对于您的问题,

Q1。在无状态情况下,LSTM 更新批处理 1 上的参数,然后为批处理 2 启动隐藏状态和单元状态(通常全为零),而在有状态情况下,它使用批处理 1 的最后输出隐藏状态和单元状态作为批处理 2 的初始状态。

第二季度。从上面可以看出,当两批中的两个序列有联系时(例如一只股票的价格),最好使用有状态模式,否则(例如一个序列代表一个完整的句子)则应该使用无状态模式。

顺便说一句,@vu.pham 说如果我们使用有状态 RNN,那么在生产中,网络将被迫处理无限长的序列。这似乎不正确,实际上,正如您在 Q1 中看到的,LSTM 不会学习整个序列,它首先学习批处理 1 中的序列,更新参数,然后学习批处理 2 中的序列。

关于tensorflow - Keras - 有状态 LSTM 与无状态 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681046/

相关文章:

tensorflow - 如何加快tensorflow的rnn训练速度?

neural-network - 使用神经网络进行 Q 学习

python - tensorflow keras : I am getting this error 'module "tensorflow. _api.v1.keras.layers' 没有属性 'flatten'“

java - 如何在从keras导出的java中加载tensorflow .pb模型

python - 错误 : Out Of Memory, tensorflow cnn

python - 在 GPU 上使用 tf.train.Saver() 导致 Tensorflow 崩溃

python - Tensorflow U-Net 多类标签

machine-learning - 定时从Google Colab下载

python - return_sequence=True 的 LSTM 之后的 Keras Dense 层

python - 在 TF 估计器中使用 Keras 模型