计算TensorFlow中可变序列长度的实际序列长度?

时间:2018-04-30 06:52:25

标签: tensorflow recurrent-neural-network

我最近遇到了Danijar Hafner关于变量序列长度here的不错的热门博客。他使用如下函数来计算填充序列的实际长度。

def length(sequence):
    used = tf.sign(tf.reduce_max(tf.abs(sequence), 2))
    length = tf.reduce_sum(used, 1)
    length = tf.cast(length, tf.int32)
    return length

但是,我认为这个长度函数可能在他example code中将RNN应用于mnist数据集时出现问题。根据我的理解,代码将手写图片的行视为类似于以下架构的时间步骤,除了他使用softmax输入的最后相关输出。并且该示例将最后的零行解释为填充。因此,不同的数字具有不同的长度,因此可用于表示可变长度序列。 this architecture

但是,上面的长度函数也会将序列开头的零行视为填充。例如,在下图中,实际长度应为26,但函数为20。

这有什么不对吗???

enter image description here

1 个答案:

答案 0 :(得分:0)

恕我直言,作者试图使用张量流来重新计算张量流中的序列长度,而不是简单地提供它。我认为doig没有正当理由。

  • 信息已知,可以简单提供
  • 重新计算依赖于条目永远不为零的额外假设

这最后的假设肯定是有问题的,可以想象很多情况下零是完全合法的输入。可以尝试使用infnan值来修复此约定,但为什么要这么麻烦呢?

顺便说一句,帖子相当陈旧,用于切片的聪明技巧现在无关紧要,因为tensorflow现在支持numpy风格的切片。