tensorflow
Использование условия if внутри графа TensorFlow с tf.cond
Поиск…
параметры
параметр | подробности |
---|---|
ПРЕД | тензор TensorFlow типа bool |
fn1 | вызываемая функция без аргументов |
fn2 | вызываемая функция без аргументов |
название | (необязательное) имя для операции |
замечания
-
pred
не может быть простоTrue
илиFalse
, он должен быть тензором - Функция
fn1
иfn2
должна возвращать одинаковое количество выходов с одинаковыми типами.
Основной пример
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.
Когда f1 и f2 возвращают несколько тензоров
Две функции fn1
и fn2
могут возвращать несколько тензоров, но они должны возвращать точные номера и типы выходов.
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.]
определить и использовать функции f1 и f2 с параметрами
Вы можете передавать параметры в функции tf.cond (), используя lambda, а код - ниже.
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))
Тогда вы можете назвать это ревом:
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow