我试图将张量添加到tensorflow控制循环内的python列表中。你知道吗
我的代码:
import tensorflow as tf
graph = tf.Graph()
with graph.as_default():
c = lambda i, limit: tf.less(i, limit)
t = (1,5)
x = []
def loop_forward(i, limit):
x.append(1)
return tf.tuple([i + 1, limit])
loop = tf.while_loop(c, loop_forward, loop_vars=t, back_prop=False, name="loop")[0]
with tf.control_dependencies([loop]):
b = tf.stack(x)
with tf.Session(graph=graph) as sess:
print(sess.run(b))
这会产生[1]
,但不会像我预期的那样[1,1,1,1]
。知道为什么吗?你知道吗
按照大卫的回答,我试着这样做:
import tensorflow as tf
graph = tf.Graph()
with graph.as_default():
c = lambda i, limit: tf.less(i, limit)
t = (1,5)
v = tf.convert_to_tensor([1])
with tf.control_dependencies([v]):
def loop_forward(i, limit):
v = tf.concat([v,tf.convert_to_tensor([1])], axis=0)
return tf.tuple([i + 1, limit])
loop = tf.while_loop(c, loop_forward, loop_vars=t, back_prop=False, name="loop")[0]
with tf.control_dependencies([loop]):
b = v
with tf.Session(graph=graph) as sess:
print(sess.run(b))
似乎产生了这样的错误:
Traceback (most recent call last):
File "test-looping-3.py", line 12, in <module>
loop = tf.while_loop(c, loop_forward, loop_vars=t, back_prop=False, name="loop")[0]
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2934, in while_loop
result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2720, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2662, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "test-looping-3.py", line 10, in loop_forward
v = tf.concat([v,tf.convert_to_tensor([1])], axis=0)
UnboundLocalError: local variable 'v' referenced before assignment
但是v
不是一个变量,它是一个Tensor
,所以不确定这个错误是如何产生的。你知道吗
简而言之:tfwhile循环中没有python。你知道吗
只能在tensorflow while循环中使用tensorflow构造。
x.append(1)
是一个python构造。你知道吗事实上,这里有一个关于TF while循环的有趣的小细节,
loop_forward
将只被称为一次。这是因为它只定义TF-graph操作。Tensorflow将根据您的条件多次运行这些操作c = lambda i, limit: tf.less(i, limit)
。你知道吗有了这些琐事,应该很清楚为什么在传统的python意义上把
loop_forward
当作循环是错误的。你知道吗但是,您可以实现您的目标,您只需要使用tensorflow构造即可。
tf.concat
可能是您想要用来将一个值连接到张量的末尾。一切都是张量流中的张量。你知道吗相关问题 更多 >
编程相关推荐