Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.case

Создать операцию case.

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

См. также tf.switch_case.

Параметр pred_fn_pairs — это словарь или список пар размера N. Каждая пара содержит булеву скалярную тензор и python-вызов, который создаёт тензоры, которые должны возвращаться, если булево значение равно 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 Словарь или список пар булевой скалярной тензор и вызова, возвращающего список тензоров.
default Необязательный вызов, возвращающий список тензоров.
exclusive True, если допускается оценка не более одного предиката до True.
strict Булево значение, которое включает/выключает «строгий» режим; см. выше.
name Имя для этой операции (необязательно).
Возвращаемые значения
Тензоры, возвращённые первой парой, предикат которой принял значение True, или те, которые возвращает default, если таковой нет.
Исключения
TypeError Если pred_fn_pairs не является списком/словарем.
TypeError Если pred_fn_pairs является списком, но не содержит 2-кортежей.
TypeError Если fns[i] не является вызовом для любого i или default не является вызовом.

совместимость с eager mode

Неупорядоченные словари не поддерживаются в режиме 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/versions/r2.9/api_docs/python/tf/compat/v1/case

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API