tf.compat.v1.case
Создаёт операцию ветвления.
tf.compat.v1.case(
pred_fn_pairs,
default=None,
exclusive=False,
strict=False,
name='case'
)
См. также tf.switch_case.
Параметр pred_fn_pairs — это словарь или список из N пар. Каждая пара содержит скалярный тензор типа boolean и вызываемый объект Python, который создаёт тензоры, возвращаемые, если значение boolean равно True. default — вызываемый объект, создающий список тензоров. Все вызываемые объекты в pred_fn_pairs, а также default (если он указан), должны возвращать одинаковое количество тензоров одинаковых типов.
Если exclusive==True, вычисляются все предикаты, и возникает исключение, если более одного предиката принимает значение True. Если exclusive==False, выполнение останавливается на первом предикате, который принимает значение True, и тензоры, созданные соответствующей функцией, немедленно возвращаются. Если ни один предикат не принимает значение True, эта операция возвращает тензоры, созданные default.
tf.case поддерживает вложенные структуры, реализованные в tf.nest. Все вызываемые объекты должны возвращать одинаковую (возможно, вложенную) структуру значений из списков, кортежей и/или именованных кортежей. Исключение составляют только списки и кортежи из одного элемента: при возврате вызываемым объектом они неявно распаковываются в отдельные значения. Это поведение отключается с помощью strict=True.
Если для pred_fn_pairs используется неупорядоченный словарь, порядок условных проверок не гарантируется. Однако порядок является детерминированным, поэтому переменные, создаваемые в условных ветвях, создаются в фиксированном порядке при каждом запуске.
Пример 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)
| Аргументы | |
|---|---|
pred_fn_pairs | Словарь или список пар, состоящих из скалярного тензора типа boolean и вызываемого объекта, возвращающего список тензоров. |
default | Необязательный вызываемый объект, возвращающий список тензоров. |
exclusive | True, если не более одного предиката может принять значение True. |
strict | Логическое значение, включающее или отключающее режим «strict»; см. выше. |
name | Имя этой операции (необязательно). |
| Возвращает | |
|---|---|
Тензоры, возвращённые первой парой, предикат которой принял значение True, или тензоры, возвращённые default, если ни один предикат не принимает это значение. |
| Вызывает исключения | |
|---|---|
TypeError | Если pred_fn_pairs не является списком или словарём. |
TypeError | Если pred_fn_pairs является списком, но не содержит кортежи из двух элементов. |
TypeError | Если fns[i] не является вызываемым объектом для какого-либо i или default не является вызываемым объектом. |
совместимость с eager execution
Неупорядоченные словари не поддерживаются в режиме eager, если exclusive=False. Вместо этого используйте список кортежей.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/case