tf.numpy_function
| Просмотреть исходный код на GitHub |
Оборачивает функцию Python и использует её как операцию TensorFlow.
tf.numpy_function(
func, inp, Tout, 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 имеет следующие известные ограничения:
Тело функции (т.е.
func) не будет сериализовано вtf.SavedModel. Поэтому не следует использовать эту функцию, если вам нужно сериализовать вашу модель и восстановить её в другой среде.Операция должна выполняться в том же адресном пространстве, что и программа Python, вызывающая
tf.numpy_function(). Если вы используете распределённый TensorFlow, вы должны запуститьtf.distribute.Serverв том же процессе, что и программа, вызывающаяtf.numpy_function. Вы должны привязать созданную операцию к устройству в этом сервере (например, используяwith tf.device():).Так как функция принимает массивы 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.)copy может иметь непредсказуемые последствия. |
inp | Список объектов tf.Tensor. |
Tout | Список или кортеж типов данных TensorFlow, или один тип данных TensorFlow, если их только один, указывающий, что возвращает func . |
name | (Необязательно) Имя операции. |
| Возвращаемые значения | |
|---|---|
Один или список tf.Tensor, который вычисляет func . |
© 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/numpy_function