Tensorflow:从变量序列长度

时间:2016-10-02 19:55:51

标签: tensorflow lstm

我使用tf.nn.bidirectional_rnnsequence_length参数作为变量输入大小,我无法弄清楚如何获取小批量中每个样本的最终输出:< / p>

output, _, _ = tf.nn.bidirectional_rnn(forward1,backward1,input,dtype=tf.float32,sequence_length=input_lengths)

现在,如果我有恒定的序列长度,我只需使用output[-1]并获得最终输出。在我的情况下,我有可变序列(它们的长度是已知的)。 此外,此输出是前向和后向LSTM的输出吗?

感谢。

1 个答案:

答案 0 :(得分:0)

可以通过查看源代码rnn.py来回答这个问题。

对于具有动态长度的序列,源代码表示:

  

如果提供sequence_length向量,则动态计算为   执行。这种计算方法不计算RNN步骤   超过小批量的最大序列长度(从而节省   计算时间),并适当地传播状态   示例的序列长度到最终状态输出。

因此,为了获得实际的最后输出,您应该对结果输出进行切片。

对于bidirectional_rnn,源代码说:

  

元组(outputs,output_state_fw,output_state_bw)其中:         输出是一个长度为T的输出列表(每个输入一个),其中           是深度连接的前向和后向输出。         output_state_fw是前向rnn的最终状态。         output_state_bw是向后rnn的最终状态。

因此,输出是元组而不是张量。 如果愿意,可以将这个元组连接成一个向量。