Suche…


Parameter

Parameter Einzelheiten
pred ein TensorFlow-Tensor vom Typ bool
fn1 eine aufrufbare Funktion ohne Argument
fn2 eine aufrufbare Funktion ohne Argument
Name (optional) Name für die Operation

Bemerkungen

  • pred kann nicht nur True oder False , es muss ein Tensor sein
  • Die Funktion fn1 und fn2 sollte die gleiche Anzahl von Ausgaben mit denselben Typen zurückgeben.

Grundlegendes Beispiel

x = tf.constant(1.)
bool = tf.constant(True)

res = tf.cond(bool, lambda: tf.add(x, 1.), lambda: tf.add(x, 10.))
# sess.run(res) will give you 2.

Wenn f1 und f2 mehrere Tensoren zurückgeben

Die beiden Funktionen fn1 und fn2 können mehrere Tensoren zurückgeben, sie müssen jedoch die gleiche Anzahl und Typen von Ausgaben zurückgeben.

x = tf.constant(1.)
bool = tf.constant(True)

def fn1():
    return tf.add(x, 1.), x

def fn2():
    return tf.add(x, 10.), x

res1, res2 = tf.cond(bool, fn1, fn2)
# tf.cond returns a list of two tensors
# sess.run([res1, res2]) will return [2., 1.]

Definieren und Verwenden der Funktionen f1 und f2 mit Parametern

Sie können Parameter mit Hilfe von Lambda an die Funktionen in tf.cond () übergeben. Der Code ist wie folgt.

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = tf.placeholder(tf.float32)

def fn1(a, b):
  return tf.mul(a, b)

def fn2(a, b):
  return tf.add(a, b)

pred = tf.placeholder(tf.bool)
result = tf.cond(pred, lambda: fn1(x, y), lambda: fn2(y, z))

Dann kannst du es als brüllen nennen:

with tf.Session() as sess:
  print sess.run(result, feed_dict={x: 1, y: 2, z: 3, pred: True})
  # The result is 2.0
  print sess.run(result, feed_dict={x: 1, y: 2, z: 3, pred: False})
  # The result is 5.0


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow