使用带有TensorFlow while_loop的python列表

时间:2017-06-30 20:39:43

标签: python tensorflow

有没有办法在使用control_flow_ops.while_loop时迭代python列表?

我正在使用control_flow_ops.while_loop迭代我的RNN中的序列。 我还有一个我想要调用的函数列表。

设'j'表示while_loop中序列的当前索引。 当我迭代时,我想在L中调用索引j处的函数。

但是调用L [j]不起作用:j是表示序列索引的张量,L是python列表。 tf.gather也不起作用因为我也无法将L转换为张量(元素是函数)。

如何在while_loop中访问L的元素?示例如下:

L = [fn1,fn2,fn3]

def body(j,seq):
    seq_elem = seq.read(j)

    # Try to get the function stored in L.
    fn = L[j] # Doesn't work, L is a python list while j is a tensor.

    fn(seq_elem)
    return j+1,seq

_, _ = control_flow_ops.while_loop(
        cond = lambda j, _: j < seq_length,
        body=body,
        loop_vars=(tf.constant(0,dtype=tf.int32), seq)

2 个答案:

答案 0 :(得分:0)

来自@ soloice的回答:How to index a list with a TensorFlow tensor?

“只需​​运行tf.gather(list,tf_look_up [index]),你就会得到你想要的东西。”

这有帮助吗?

答案 1 :(得分:0)

无法转换为张量的列表不适用于tf.while_loop(截至2017年7月)。