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
  • Полный пример использования средства чтения TensorFlow для BigQuery
  • Сегментация экземпляров с помощью Model Garden
Примечание: Эта операция автоматически используется в tf.function для преобразования инструкций if в 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