对于变量的输入大小,我使用tf.nn.bidirectional_rnn和sequence_length参数,并且我不知道如何获得小型批处理中每个示例的最终输出:
output, _, _ = tf.nn.bidirectional_rnn(forward1,backward1,input,dtype=tf.float32,sequence_length=input_lengths)现在,如果我有固定的序列长度,我只需要使用output[-1]并得到最终的输出。在我的例子中,我有可变序列(它们的长度已知)。同样,这是前向和后向LSTM的输出吗?
谢谢。
发布于 2016-10-03 22:56:08
这个问题可以通过查看源代码rnn.py来回答。
对于具有动态长度的序列,源代码说:
如果提供sequence_length矢量,则执行动态计算。这种计算方法不计算RNN步骤超过最小批处理的最大序列长度(从而节省了计算时间),并适当地将示例的序列长度状态传播到最终的状态输出。
因此,为了获得实际的最后输出,您应该对结果输出进行切片。
对于bidirectional_rnn,源代码中写着:
一个元组( outputs,output_state_fw,output_state_bw),其中: outputs是一个长度为
T的输出列表(每个输入一个),它们是深度级联的正向和反向输出。output_state_fw是正向神经网络的最终状态。output_state_bw是反向rnn的最终状态。
因此,输出是元组而不是张量。如果您愿意,可以将这个元组连接成一个向量。
https://stackoverflow.com/questions/39821069
复制相似问题