Spec-Zone.ru › TensorFlow 2.9

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.

© 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/cond

Spec-Zone.ru

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