Spec-Zone.ru › TensorFlow 2.4

tf.cond

Просмотреть исходный код на GitHub

Возвращает true_fn() если предикат pred истинен, иначе false_fn().

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

true_fn и false_fn оба возвращают списки выходных тензоров. true_fn и false_fn должны иметь одинаковое ненулевое количество и тип выходов.

Предупреждение: Любые тензоры или операции, созданные за пределами true_fn и false_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 не будет. Поскольку z необходима для хотя бы одной ветви cond, операция tf.multiply всегда выполняется безусловно.

Обратите внимание, что cond вызывает true_fn и false_fn ровно один раз (внутри вызова cond, и никак не во время Session.run()). cond склеивает фрагменты графа, созданные во время вызовов true_fn и false_fn, с некоторыми дополнительными узлами графа, чтобы гарантировать, что правильная ветвь будет выполнена в зависимости от значения pred.

tf.cond поддерживает вложенные структуры, как реализовано в tensorflow.python.util.nest. И true_fn, и false_fn должны возвращать одну и ту же (возможно, вложенную) структуру значений из списков, кортежей и/или именованных кортежей. Исключениями являются только одиночные списки и кортежи: когда они возвращаются true_fn и/или false_fn, они неявно распаковываются до одиночных значений.

Примечание: Запрещено «прямое» использование тензоров, созданных внутри ветви cond, за пределами этой ветви, например, путем хранения ссылки на тензор ветви в состоянии python. Если вам необходимо использовать тензор, созданный в функции ветви, верните его как выход функции ветви и используйте выход из tf.cond вместо этого.
Аргументы
pred Скаляр, определяющий, нужно ли вернуть результат true_fn или false_fn .
true_fn Вызываемый объект, который нужно выполнить, если pred истинно.
false_fn Вызываемый объект, который нужно выполнить, если pred ложно.
name Необязательный префикс имени для возвращаемых тензоров.
Возвращаемое значение
Тензоры, возвращаемые вызовом либо true_fn, либо false_fn. Если вызываемые объекты возвращают одиночный список, элемент извлекается из списка.
Исключения
TypeError если true_fn или false_fn не вызываемый объект.
ValueError если true_fn и false_fn не возвращают одинаковое количество тензоров или тензоры разных типов.

Пример:

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.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/cond

Spec-Zone.ru

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