我使用tf.nn.bidirectional_rnn
和sequence_length
参数作为变量输入大小,我无法弄清楚如何获取小批量中每个样本的最终输出:< / p>
output, _, _ = tf.nn.bidirectional_rnn(forward1,backward1,input,dtype=tf.float32,sequence_length=input_lengths)
现在,如果我有恒定的序列长度,我只需使用output[-1]
并获得最终输出。在我的情况下,我有可变序列(它们的长度是已知的)。
此外,此输出是前向和后向LSTM的输出吗?
感谢。
答案 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的最终状态。
因此,输出是元组而不是张量。 如果愿意,可以将这个元组连接成一个向量。