tf.map_fn& tf.range令人困惑的结果

时间:2018-04-29 03:18:31

标签: python tensorflow

以下是可重现的代码:

def _test_fn(tp):
    tp0 = tp[0]
    tp1 = tp[1]
    result = tf.range(tp0, tp1)
    return result

ll = tf.constant([[1,4], [5, 7]])

result = tf.map_fn(lambda tp: _test_fn(tp), ll)

sess = tf.Session()
sess.run(result)

此代码预计输出[[1,2,3], [5,6]]。但是,我得到一个错误:

  

InvalidArgumentError(参见上面的回溯):TensorArray具有不一致的形状。索引0具有形状:[3]但索引1具有形状:[2]

我是否误解了tf.range()tf.map_fn()的使用情况,还是错误?

1 个答案:

答案 0 :(得分:1)

_test_fn的第一个应用将返回范围(1,4),即[1,2,3]。第二个应用程序将返回范围(5,7),即[5,6]。然后,Tensorflow将尝试将所有这些放入一个张量,即[[1,2,3],[5,6]]。这不是一个有效的张量,因为这两行有不同的长度,所以这个代码崩溃了。你想要达到什么目的?