tf.numpy_function
| Просмотреть исходный код на GitHub |
Оборачивает функцию Python и использует её как операцию TensorFlow.
tf.numpy_function(
func, inp, Tout, stateful=True, name=None
)
Принимая функцию Python func обернуть эту функцию как операцию в функции TensorFlow. func должна принимать массивы NumPy в качестве аргументов и возвращать массивы NumPy в качестве выходов.
Следующий пример создаёт граф TensorFlow с np.sinh() как операцией в графе:
def my_numpy_func(x): # x will be a numpy array with the contents of the input to the # tf.function return np.sinh(x) @tf.function(input_signature=[tf.TensorSpec(None, tf.float32)]) def tf_function(input): y = tf.numpy_function(my_numpy_func, [input], tf.float32) return y * y tf_function(tf.constant(1.)) <tf.Tensor: shape=(), dtype=float32, numpy=1.3810978>
Сравнение с tf.py_function: tf.py_function и tf.numpy_function очень похожи, за исключением того, что tf.numpy_function принимает массивы NumPy, а не tf.Tensorы. Если вы хотите, чтобы функция содержала tf.Tensors, и чтобы все операции TensorFlow, выполненные в функции, были дифференцируемыми, используйте tf.py_function.
Примечание: Мы рекомендуем избегать использования tf.numpy_function вне прототипирования и экспериментов из-за следующих известных ограничений:
Вызов
tf.numpy_functionполучит блокировку глобального интерпретатора Python (GIL), которая позволяет только одному потоку работать в любой момент времени. Это предотвратит эффективное распараллеливание и распределение выполнения программы. Поэтому мы не рекомендуем использоватьtf.numpy_functionвне прототипирования и экспериментов.Тело функции (т.е.
func) не будет сериализовано вtf.SavedModel. Поэтому не следует использовать эту функцию, если вам необходимо сериализовать вашу модель и восстановить её в другой среде.Операция должна выполняться в том же адресном пространстве, что и программа Python, вызывающая
tf.numpy_function(). Если вы используете распределённый TensorFlow, вам необходимо запуститьtf.distribute.Serverв том же процессе, что и программа, вызывающаяtf.numpy_function, и привязать созданную операцию к устройству в этом сервере (например, с помощьюwith tf.device():).В настоящее время
tf.numpy_functionнесовместим с XLA. Вызовtf.numpy_functionвнутриtf.function(jit_comiple=True)вызовет ошибку.Поскольку функция принимает массивы NumPy, вы не можете получить градиенты через numpy_function. Если вам нужна дифференцируемая функция, рассмотрите использование tf.py_function.
| Аргументы | |
|---|---|
func | Функция Python, которая принимает объекты numpy.ndarray в качестве аргументов и возвращает список объектов numpy.ndarray (или один объект numpy.ndarray). Эта функция должна принимать столько аргументов, сколько тензоров в inp, и типы этих аргументов будут соответствовать соответствующим объектам tf.Tensor в inp. Возвращаемые numpy.ndarray должны соответствовать числу и типам, определённым Tout. Важное примечание: входящие и исходящие numpy.ndarray функции func не гарантируются как копии. В некоторых случаях их базовое хранение будет совместно использоваться с соответствующими тензорами TensorFlow. Изменение на месте или сохранение func входных или возвращаемых значений в структурах данных Python без явного (np.) копирования может привести к непредсказуемым последствиям. |
inp | Список объектов tf.Tensor. |
Tout | Список или кортеж типов данных TensorFlow, или один тип данных TensorFlow, если их только один, указывающий, что возвращает func. |
stateful | (Булево.) Установка этого аргумента в False говорит исполнителю рассматривать функцию как бессостоятельную, что позволяет использовать определённые оптимизации. Функция является бессостоятельной, если для одного и того же входного значения она возвращает одно и то же выходное значение и не имеет побочных эффектов; её единственной целью является возвращаемое значение. Поведение состоятельной функции с аргументом stateful False не определено. В частности, следует проявлять осторожность при изменении входных аргументов, так как это является состоятельной операцией. |
name | (Необязательно) Имя операции. |
| Возвращаемые значения | |
|---|---|
Один или список объектов tf.Tensor, который func вычисляет. |
© 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/numpy_function