1. 程式人生 > >tensorflow條件語句-tf.cond

tensorflow條件語句-tf.cond

tf.cond
 
tf.cond(
    pred,
    true_fn=None,
    false_fn=None,
    strict=False,
    name=None,
    fn1=None,
    fn2=None
)

如果謂詞pred是真的返回true_fn(),否則返回false_fn()。

有些引數將過時,在未來版本將被移除,指令更新:fn1/fn2 不支援 true_fn/false_fn引數。

true_fn 和 false_fn 都返回一個輸出tensors。true_fn 和 false_fn 必須有相同的非零數和型別輸出。

條件執行僅用於在true_fn 和false_fn定義的操作。


#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018
@author: myhaspl
"""

import tensorflow as tf
x = tf.constant(11)
y = tf.constant(22)

z = tf.multiply(x, y)
result1 = tf.cond(x > y, lambda: tf.add(x, y), lambda: tf.square(y))
result2 = tf.cond(x < y, lambda: tf.add(x, y), lambda: tf.square(y))

init_op = tf.global_variables_initializer()
sess=tf.Session()
with sess: 
    sess.run(init_op)
    print sess.run(result1)
    print sess.run(result2)

 

484
33
result2:當x<y,tf.add
result1:當x>y:tf.add

這種行為偶爾也會讓一些期望語義更懶的使用者感到驚訝。

條件呼叫 true_fn和 false_fn 僅一次(包括對cond的呼叫,不在Session.run()期間),條件將true_fn和false_fn呼叫期間建立的計算圖片斷和一些附加的計算圖結點縫合在一起,以確保根據pred的值執行正確的分支。

tf.cond 支援在 tensorflow.python.util.nest.實現的巢狀結構。true_fn和false_fn必須返回相同的(可能是巢狀的)值結構,這些結構包括lists、tuples、命名元組。單例列表和元組形成了唯一的例外:當由true_fn和false_fn返回時,它們被隱式地解包為單個值。通過傳遞strict=True,禁用此行為。

引數:

pred: 一個標量決定了返回結果是true_fn 還是 false_fn。
true_fn: 當pred為真時,呼叫。
false_fn: 當pred為假時,呼叫。
strict: 一個boolen型別。
name: 返回tensors的可選名字字首。
返回:

返回

通過呼叫true_fn或ffalse_fn 返回的張量。如果回撥函式返回單列表,則從列表中提取元素。

Raises:

TypeError: true_fn或false_fn 不能呼叫
ValueError:true_fn和false_fn 不能返回相同數量的張量,或者返回不同型別的張量。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018
@author: myhaspl
"""

import tensorflow as tf
x = tf.constant(2)
y = tf.constant(5)
def f1(): 
    return tf.multiply(x, 17)
def f2(): 
    return tf.add(y, 23)
z = tf.cond(tf.less(x, y), f1, f2)

sess=tf.Session()
with sess: 
    print sess.run(z)

34