在Tensorflow中连接两个RNN状态

时间:2017-10-24 05:57:39

标签: python tensorflow nlp deep-learning

我试图在张量流中将两个LSTM状态连接在一起。以前,这已经使用tf.concat完成,但这对我不起作用,因为我需要计算结果状态的日志,并且我无法遍历'Tensor' object is not iterable以来的结果状态。

以下是我要做的事情:

outputs, fstate = tf.nn.dynamic_rnn(cell=lstm, inputs=rnn_inputs,
                                      sequence_length=lengths, 
                                      dtype=tf.float32, time_major=False)
outputs2, fstate2 = tf.nn.dynamic_rnn(cell=lstm2, inputs=rnn_inputs2,
                                      sequence_length=lengths2, 
                                      dtype=tf.float32, time_major=False)

newRnnState = tf.concat([fstate, fstate2], 1)
logits = tf.matmul(tf.concat([f.h for f in newRnnState], 1), output_layer[0]) + output_bias[0]

这会返回错误:TypeError: 'Tensor' object is not iterable.

有没有办法做到这一点,以便我可以将两个RNN状态连接在一起并像这样使用它们?

由于

1 个答案:

答案 0 :(得分:1)

根据我们在评论中所说的,您应该将输出图层的大小设置为(2*cell_size, output_size),因为您沿着轴1连接了2个cell_size大小的状态。然后您可以使用: tf.matmul(tf.concat([fstate[0].h, fstate2[0].h], 1), output_layer[0]) + output_bias[0]