當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.cond用法及代碼示例


如果謂詞 pred 為真,則返回 true_fn() 否則 false_fn()

用法

tf.cond(
    pred, true_fn=None, false_fn=None, name=None
)

參數

  • pred 一個標量,確定是否返回 true_fnfalse_fn 的結果。
  • true_fn 如果 pred 為真,則要執行的調用。
  • false_fn 如果 pred 為假,則要執行的可調用。
  • name 返回的張量的可選名稱前綴。

返回

  • 調用 true_fnfalse_fn 返回的張量。如果可調用對象返回單例列表,則從列表中提取元素。

拋出

  • TypeError 如果 true_fnfalse_fn 不可調用。
  • ValueError 如果 true_fnfalse_fn 不返回相同數量的張量,或者返回不同類型的張量。

true_fnfalse_fn 都返回輸出張量的列表。 true_fnfalse_fn 必須具有相同的非零數量和類型的輸出。

警告:無論在運行時選擇哪個分支,在 true_fnfalse_fn 之外創建的任何張量或操作都將被執行。

盡管這種行為與 TensorFlow 的數據流模型是一致的,但它經常讓那些期待更惰性語義的用戶感到驚訝。考慮以下簡單程序:

z = tf.multiply(a, b)
result = tf.cond(x < y, lambda:tf.add(x, z), lambda:tf.square(y))

如果 x < y ,將執行 tf.add 操作,而不會執行 tf.square 操作。由於cond 的至少一個分支需要z,因此始終無條件地執行tf.multiply 操作。

注意cond調用true_fnfalse_fn 恰好一次(在調用內cond, 並且在Session.run())。cond將在創建過程中創建的圖形片段縫合在一起true_fnfalse_fn調用一些額外的圖節點,以確保根據值執行正確的分支pred.

tf.cond 支持在 tensorflow.python.util.nest 中實現的嵌套結構。 true_fnfalse_fn 都必須返回相同的(可能是嵌套的)列表、元組和/或命名元組的值結構。單例列表和元組是唯一的異常:當 true_fn 和/或 false_fn 返回時,它們被隱式解包為單個值。

注意:"directly" 使用在其外部的 cond 分支內創建的張量是非法的,例如通過在 python 狀態中存儲對分支張量的引用。如果您需要使用在分支函數中創建的張量,則應將其作為分支函數的輸出返回,並改用 tf.cond 的輸出。

例子:

x = tf.constant(2)
y = tf.constant(5)
def f1():return tf.multiply(x, 17)
def f2():return tf.add(y, 23)
r = tf.cond(tf.less(x, y), f1, f2)
# r is set to f1().
# Operations in f2 (e.g., tf.add) are not executed.

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.cond。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。