参考这个帖子了解问题的背景: TensorFlow embedding_attention_seq2seq方法是否默认实现了双向RNN Encoder?
我正在研究相同的模型,并想用双向层替换单向 LSTM 层。我意识到我必须使用 static_bidirectional_rnn 而不是 static_rnn,但由于张量形状中的一些不匹配,我得到了一个错误。
我替换了以下行:
encoder_outputs, encoder_state = core_rnn.static_rnn(encoder_cell, encoder_inputs, dtype=dtype)
与下面的行:
encoder_outputs, encoder_state_fw, encoder_state_bw = core_rnn.static_bidirectional_rnn(encoder_cell, encoder_cell, encoder_inputs, dtype=dtype)
这给了我以下错误:
InvalidArgumentError(有关回溯,请参见上文):不兼容的形状:[32,5,1,256] 与 [16,1,1,256] [[节点:梯度/model_with_buckets/embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/Attention_0/add_grad/BroadcastGradientArgs = BroadcastGradientArgs[T =DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](梯度/model_with_buckets/embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/Attention_0/add_grad/Shape, gradients/model_with_buckets/embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder /Attention_0/add_grad/Shape_1)]]
我知道这两种方法的输出是不同的,但我不知道如何修改注意力代码来合并它。如何将前向和后向状态都发送到注意力模块——我是否将两个隐藏状态连接起来?