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的不同实现。它需要您的conditionbody运行已使用传递给它的函数进行参数化的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,) 
>>>