Spec-Zone.ru › TensorFlow 2.3

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 равен true.
false_fn Вызываемый объект, который выполняется, если pred равен false.
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.3/api_docs/python/tf/cond

Spec-Zone.ru

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