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

Fra*_*gno 5 deep-learning lstm keras tensorflow

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

对于 TensorFlow 也提出了类似的问题,但我确信在 Keras 中执行此操作的正确方法并不意味着要import keras.backend as K破解 Keras 类。

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

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)
Run Code Online (Sandbox Code Playgroud)

这可行,但确实很难看。有什么优雅的方法可以做到这一点吗?

预先感谢您的热情帮助!

Ori*_*sky 3

可以在这里查找更多详细信息https://blog.keras.io/a-ten-month-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)
Run Code Online (Sandbox Code Playgroud)

  • 这是不对的...编码器正在与解码器一起学习..您不必将它们放入不同的模型中..请阅读文章 (2认同)