如何在Keras训练LSTM的初始状态?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Keras训练LSTM的初始状态?相关的知识,希望对你有一定的参考价值。

我在Keras工作,我有一个LSTM,我指定了一个intial_state=h0。现在,我希望h0成为一个可训练的变量。我怎样才能做到这一点?

A similar question was asked for TensorFlow,但我确信在Keras这样做的正确方法并不意味着import keras.backend as K和黑客Keras课程。

目前,我的丑陋解决方案在于使用等于0的虚拟输入并学习初始状态作为输出(=层偏置,因为我给出虚拟输入= 0)的Dense层,其输入由虚拟输入给出:

dummy_inp = Input((1,), name='dummy_inp')
dummy_inp_zero = Lambda(lambda t: t*0)(dummy_inp) # to ensure that the input=0
layer_h0 = Dense(dim_lstm_state, bias_initializer='zeros')
lstm_network = LSTM(n_units, bias_initializer='zeros', return_sequence=True)

h0 = layer_h0(dummy_inp_zero)

这很有效,但真的很难看。有没有优雅的方法来做到这一点?

提前谢谢您的帮助!

答案

可以在这里查找更多细节https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html

encoder_states = [state_h, state_c]

decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
                                     initial_state=encoder_states)

以上是关于如何在Keras训练LSTM的初始状态?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 如何处理单元格和隐藏状态(RNN、LSTM)的初始值以进行推理?

Keras LSTM:如何预测超越验证与预测?

将 Pytorch LSTM 的状态参数转换为 Keras LSTM

使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因

Keras每一步的多步LSTM批量训练分类

Keras 中的 LSTM 实现是如何工作的