当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.case用法及代码示例


创建案例操作。

用法

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

参数

  • pred_fn_pairs 布尔标量张量对的列表和返回张量列表的可调用对象。
  • default 返回张量列表的可选可调用对象。
  • exclusive 如果最多允许一个谓词计算为 True ,则为真。
  • strict 启用/禁用 'strict' 模式的布尔值;往上看。
  • name 此操作的名称(可选)。

返回

  • 由谓词评估为 True 的第一对返回的张量,如果没有,则由 default 返回的张量。

抛出

  • TypeError 如果 pred_fn_pairs 不是列表/元组。
  • TypeError 如果 pred_fn_pairs 是一个列表但不包含 2 元组。
  • TypeError 如果 fns[i] 对于任何 i 都不可调用,或者 default 不可调用。

另见tf.switch_case

pred_fn_pairs 参数是大小为 N 的对的列表。每对包含一个布尔标量张量和一个 python 可调用项,如果布尔值计算为 True,则创建要返回的张量。 default 是一个可调用的生成张量列表。 pred_fn_pairsdefault(如果提供)中的所有可调用对象都应返回相同数量和类型的张量。

如果 exclusive==True ,则评估所有谓词,如果多个谓词评估为 True ,则会引发异常。如果 exclusive==False ,则执行在第一个计算结果为 True 的谓词处停止,并立即返回相应函数生成的张量。如果没有任何谓词评估为 True,则此操作返回由 default 生成的张量。

tf.case 支持 tf.nest 中实现的嵌套结构。所有可调用对象必须返回相同的(可能是嵌套的)列表、元组和/或命名元组的值结构。单例列表和元组是唯一的异常:当由可调用对象返回时,它们被隐式解包为单个值。通过传递 strict=True 禁用此行为。

示例 1:

伪代码:

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

表达式:

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

示例 2:

伪代码:

if (x < y && x > z) raise OpError("Only one predicate may evaluate to 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 = tf.case([(tf.less(x, y), f1), (tf.greater(x, z), f2)],
         default=f3, exclusive=True)

v2 兼容性

pred_fn_pairs 可以是 v1 中的字典。但是,tf.Tensor 和 tf.Variable 在 v2 中不再是可散列的,因此不能用作字典的键。请改用列表或元组。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.case。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。