2017-08-09 1 views
1

Ist es möglich, mehrere Bedingungen für die Beendigung eines tf.while_loop im Tensorflow zu definieren? Zum Beispiel in Abhängigkeit von zwei Tensor-Werten, die zwei spezifische Werte erreichen. z.B. i==2 und j==3?Können mehrere Bedingungen in tf.while_loop definiert werden

Kann ich auch mehrere Blöcke Code im Körper haben? In allen Beispielen in der Dokumentation scheint der Körper eher wie eine einzelne Anweisung zu sein, die einen Wert oder ein Tupel zurückgibt. Ich möchte einen Satz von mehreren "sequentiellen" Anweisungen im Körper ausführen.

Antwort

2

tf.while_loop akzeptiert eine generische Callable (Python-Funktionen definiert mit def) oder lambdas), die einen booleschen Tensor zurückgeben muss.

Sie können daher Kette mehrere Bedingungen innerhalb des Körpers des Zustands der logical operators verwenden, wie tf.logical_and, tf.logical_or, ...

Auch body ist eine allgemeine Python aufrufbar, so sind Sie auf lambdas nicht beschränkt und einzelne Anweisungsfunktionen.

So etwas ist durchaus akzeptabel und funktioniert gut:

import tensorflow as tf 
import numpy as np 


def body(x): 
    a = tf.random_uniform(shape=[2, 2], dtype=tf.int32, maxval=100) 
    b = tf.constant(np.array([[1, 2], [3, 4]]), dtype=tf.int32) 
    c = a + b 
    return tf.nn.relu(x + c) 


def condition(x): 
    x = tf.Print(x, [x]) 
    return tf.logical_or(tf.less(tf.reduce_sum(x), 1000), tf.equal(x[0, 0], 15)) 


x = tf.Variable(tf.constant(0, shape=[2, 2])) 
result = tf.while_loop(condition, body, [x]) 

init = tf.global_variables_initializer() 
with tf.Session() as sess: 
    sess.run(init) 
    print(sess.run(result)) 
+0

Danke für die ausführliche Erklärung –

Verwandte Themen