2017-03-16 29 views
1

以下のwhileループは、"\n\nInside while..."を10回印刷しますが、グラフを実行すると、"\n\nInside while..."が正確に1回印刷されます。何故ですか?Tensorflow whileループは1回だけ実行されます

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]) 

答えて

1

TensorFlowグラフビルドとグラフ実行の融合が問題です。

tf.while_loopに渡す関数が1回実行され、ループ自体を実行するTensorFlowグラフが生成されます。したがって、tf.Printを入れた場合(たとえば、return tf.Print(i+1, [i+1])と言う)、ループが実際にTensorFlowシステムによって実行されると、10回印刷されます。

1

私は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,) 
>>> 
関連する問題