【问题标题】:Tensorflow: getting outputs form bidirectional_rnn with variable sequence lengthTensorflow:从具有可变序列长度的双向 rnn 获取输出
【发布时间】:2016-10-02 19:55:50
【问题描述】:

我将tf.nn.bidirectional_rnnsequence_length 参数一起用于可变输入大小,但我不知道如何获得小批量中每个样本的最终输出:

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

现在,如果我有恒定的序列长度,我会简单地使用 output[-1] 并获得最终输出。就我而言,我有可变序列(它们的长度是已知的)。 另外,这个输出是前向和后向 LSTM 的输出吗?

谢谢。

【问题讨论】:

    标签: tensorflow lstm


    【解决方案1】:

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

    对于动态长度的序列,源码中说:

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

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

    对于bidirectional_rnn,源码说:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2018-04-30
      • 2017-04-19
      • 2017-03-28
      • 2017-04-07
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多