小编SAG*_*GAR的帖子

Keras中具有LSTM的多层Seq2Seq模型

我在keras中创建了seq2seq模型。我建立了单层编码器和解码器,它们工作正常。但是现在我想将其扩展到多层编码器和解码器。我正在使用Keras Functional API构建它。

训练:-

编码器代码:-

encoder_input=Input(shape=(None,vec_dimension))
encoder_lstm=LSTM(vec_dimension,return_state=True,return_sequences=True)(encoder_input)
encoder_lstm=LSTM(vec_dimension,return_state=True)(encoder_lstm)
encoder_output,encoder_h,encoder_c=encoder_lstm
Run Code Online (Sandbox Code Playgroud)

解码器代码:-

encoder_state=[encoder_h,encoder_c]
decoder_input=Input(shape=(None,vec_dimension))
decoder_lstm= LSTM(vec_dimension,return_state=True,return_sequences=True (decoder_input,initial_state=encoder_state)
decoder_lstm=LSTM(vec_dimension,return_state=True,return_sequences=True)(decoder_lstm)
decoder_output,_,_=decoder_lstm
Run Code Online (Sandbox Code Playgroud)

供测试用 :-

encoder_model=Model(inputs=encoder_input,outputs=encoder_state)
decoder_state_input_h=Input(shape=(None,vec_dimension))
decoder_state_input_c=Input(shape=(None,vec_dimension))
decoder_states_input=[decoder_state_input_h,decoder_state_input_c]
decoder_output,decoder_state_h,decoder_state_c =decoder_lstm #(decoder_input,initial_state=decoder_states_input)
decoder_states=[decoder_state_h,decoder_state_c]
decoder_model=Model(inputs=[decoder_input]+decoder_states_input,outputs=[decoder_output]+decoder_states)
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试增加编号时。解码器中的多个层进行训练,然后训练可以正常工作,但对于测试它无效,并会引发错误。

实际上问题是当我将其设置initial_state为多层时,我将其转移到了通常在最后指定的中间层,因此当我在测试期间调用它时,会抛出错误。

RuntimeError: Graph disconnected: cannot obtain value for tensor Tensor("input_64:0", shape=(?, ?, 150), dtype=float32) at layer "input_64".The following previous layers were accessed without issue: []
Run Code Online (Sandbox Code Playgroud)

我应该如何initial_state=decoder_states_input为输入层传递which,以免引发错误。我应该如何通过initial_state=decoder_states_input在第一个输入层的最后一层?

编辑:-

在该代码中,我尝试制作多层解码器LSTM。但这给了错误。使用单层时正确的代码是:-

编码器(培训):-

encoder_input=Input(shape=(None,vec_dimension))
encoder_lstm =LSTM(vec_dimension,return_state=True)(encoder_input)
encoder_output,encoder_h,encoder_c=encoder_lstm
Run Code Online (Sandbox Code Playgroud)

解码器(培训):-

encoder_state=[encoder_h,encoder_c]
decoder_input=Input(shape=(None,vec_dimension))
decoder_lstm= LSTM(vec_dimension, return_state=True, return_sequences=True)
decoder_output,_,_=decoder_lstm(decoder_input,initial_state=encoder_state)
Run Code Online (Sandbox Code Playgroud)

解码器(测试中)

decoder_output,decoder_state_h,decoder_state_c=decoder_lstm( decoder_input, initial_state=decoder_states_input) …
Run Code Online (Sandbox Code Playgroud)

lstm keras tensorflow encoder-decoder seq2seq

8
推荐指数
2
解决办法
1486
查看次数

标签 统计

encoder-decoder ×1

keras ×1

lstm ×1

seq2seq ×1

tensorflow ×1