有没有办法在使用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)
答案 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月)。