Tensorflow while while循环只运行一次
问题描述:
下面的while循环应打印"\n\nInside while..."
10次,但是当我运行该图时,"\n\nInside while..."
只打印一次。这是为什么?Tensorflow while while循环只运行一次
i = tf.constant(0)
def condition(i):
return i < 10
def body(i):
print("\n\nInside while...", str(i))
return i + 1
r = tf.while_loop(condition, body, [i])
答
你的问题来自TensorFlow图形构建与图形执行的混合。
您传递给tf.while_loop
的函数会被执行一次,以生成负责执行循环本身的TensorFlow图。因此,如果您将tf.Print
放在那里(例如,说return tf.Print(i+1, [i+1])
),当循环实际由TensorFlow系统执行时,您会看到它打印10次。
答
我知道几乎一无所知TensorFlow并不能帮助你与你的眼前问题,但如果你编写不同的代码就可以完成类似的东西(也许)。按照您的程序的逻辑,下面设计了while_loop
的不同实现。它需要您的condition
和body
运行已使用传递给它的函数进行参数化的while循环。下面显示的是与口译员进行的对话,显示如何做到这一点。
>>> def while_loop(condition, body, local_data):
while condition(*local_data):
local_data = body(*local_data)
return local_data
>>> i = 0
>>> def condition(i):
return i < 10
>>> def body(i):
print('Inside while', i)
return i + 1,
>>> local_data = while_loop(condition, body, (i,))
Inside while 0
Inside while 1
Inside while 2
Inside while 3
Inside while 4
Inside while 5
Inside while 6
Inside while 7
Inside while 8
Inside while 9
>>> local_data
(10,)
>>>