TensorFlow 創(chuàng)建case

2018-09-06 10:36 更新

tf.case

case (  
    pred_fn_pairs ,  
    default ,  
    exclusive = False ,  
    strict = False ,  
    name = 'case' 
)

定義在:tensorflow/python/ops/control_flow_ops.py

參見指南:控制流程>控制流程操作

創(chuàng)建案例操作.

pred_fn_pairs 參數(shù)是字典或大小對的列表.每對都包含一個布爾標量張量和一個可調(diào)用的 python, 如果布爾計算結(jié)果為 True, 則創(chuàng)建要返回的數(shù)量.默認值是一個可調(diào)用的生成張量列表.pred_fn_pairs 中的所有 callables 以及默認值都應(yīng)返回相同的張量和類型.
如果 exclusive = = true, 則計算所有謂詞, 如果有多個謂詞的計算結(jié)果為 true, 則引發(fā)異常.如果 exclusive = = False, 則執(zhí)行停止是計算結(jié)果為 True 的第一個謂詞, 并立即返回相應(yīng)函數(shù)生成的張量.如果沒有任何謂詞計算為 True, 則此操作返回默認情況下生成的張量.

tf.case 支持在 tensorflow.python.util.nest 中實現(xiàn)的嵌套結(jié)構(gòu).所有的 callables 必須返回列表、元組和/或命名元組的相同 (可能是嵌套的) 值結(jié)構(gòu).單例列表和元組是唯一的例外: 當由可調(diào)用返回時, 它們被隱式解壓到單個值.通過 strict = True 來禁用此行為.
如果使用無序字典 pred_fn_pairs, 則不保證條件測試的順序.但是, 該順序保證是確定性的, 以便在條件分支中創(chuàng)建的變量在運行時按固定順序創(chuàng)建.

示例1:偽碼:

if (x < y) return 17;
else return 23;

表達式:

f1 = lambda: tf.constant(17)
f2 = lambda: tf.constant(23)
r = case([(tf.less(x, y), f1)], default=f2)

示例2:偽碼:

if (x < y && x > z) raise OpError("Only one predicate may evaluate true");
if (x < y) return 17;
else if (x > z) return 23;
else return -1;

表達式:

def f1(): return tf.constant(17)
def f2(): return tf.constant(23)
def f3(): return tf.constant(-1)
r = case({tf.less(x, y): f1, tf.greater(x, z): f2},
         default=f3, exclusive=True)

ARGS:

  • pred_fn_pairs:字典或一組布爾標量張量和一個可調(diào)用的列表,其返回張量列表.
  • default:可以返回張量列表的可調(diào)用函數(shù).
  • exclusive:如果允許最多一個謂詞可以評估,則為真True.
  • strict:啟用/禁用“嚴格”模式的布爾值.
  • name:此操作的名稱(可選).

返回:

由謂詞計算為 True 的第一對返回的張量,或者默認情況下返回的張量 (如果沒有).

注意:

  • TypeError:當 pred_fn_pairs 不是列表/字典.
  • TypeError:當 pred_fn_pairs 是一個列表,但不包含2元組.
  • TypeError:當 fns [i] 對任何 i 不可調(diào)用, 或者默認不可調(diào)用.
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號