Spec-Zone.ru › TensorFlow

tf.cond

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

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

Используется в блокнотах

Используется в руководстве Используется в учебниках
  • Типы расширений
  • Учебник по многоруким бандитам в TF-Agents
  • Отправка различных данных конкретным клиентам с помощью tff.federated_select
  • Пример конца в конец для BigQuery TensorFlow reader
  • Сегментация экземпляров с помощью Model Garden
Примечание: Этот оператор автоматически используется в tf.function для преобразования условных операторов Python, когда предикат является tf.Tensor, если явное указание autograph=False не задано в tf.function аргументах. Например, следующее эквивалентно:
@tf.function
def fun1(x,y):
  if x > 0:  # AutoGraph converts if-statement to tf.cond().
    z = y+1
  else:
    z = y-1
  return z
fun1(tf.constant(7), tf.constant(3)).numpy()
4
@tf.function
def fun2(x,y):
  pred = x > 0
  true_fn =  lambda: y+1
  false_fn = lambda: y-1
  return tf.cond(pred, true_fn, false_fn)  # Use tf.cond() explicitly.
fun1(tf.constant(7), tf.constant(3)).numpy()
4

Дополнительную информацию см. в Руководстве по tf.function и AutoGraph.

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

Предупреждение: Любые тензоры или операции, созданные за пределами true_fn и false_fn, будут выполняться независимо от того, какой ветвь будет выбрана во время выполнения.

Хотя это поведение согласуется с моделью потока данных TensorFlow, оно часто удивляло пользователей, которые ожидали более ленивой семантики. Рассмотрим следующую простую программу:

x, y = tf.constant(2, dtype=tf.int32), tf.constant(4, dtype=tf.int32)
z = tf.multiply(x, y)
r = tf.cond(x < y, lambda: tf.add(x, z), lambda: tf.square(y))
r.numpy()
10

Если 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, 7)
def f2(): return tf.add(y, 3)
r = tf.cond(tf.less(x, y), f1, f2)
# r is set to f1().
# Operations in f2 (e.g., tf.add) are not executed.
r.numpy()
14

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

Spec-Zone.ru

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