tf.compat.v1.py_func
Оборачивает функцию Python и использует её как операцию TensorFlow.
tf.compat.v1.py_func(
func, inp, Tout, stateful=True, name=None
)
Переход на TF2
Это имя было устаревшим и удалено в TF2, но tf.numpy_function является почти точной заменой, просто опустите аргумент stateful (все вызовы tf.numpy_function считаются состоятельными). Он совместим с выполнением eager и tf.function.
tf.py_function — близкая, но не точная замена, передающая тензоры TensorFlow в обернутую функцию вместо массивов NumPy, что обеспечивает градиенты и позволяет использовать ускорители.
До:
def fn_using_numpy(x):
x[0] = 0.
return x
tf.compat.v1.py_func(fn_using_numpy, inp=[tf.constant([1., 2.])],
Tout=tf.float32, stateful=False)
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([0., 2.], dtype=float32)>После:
tf.numpy_function(fn_using_numpy, inp=[tf.constant([1., 2.])],
Tout=tf.float32)
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([0., 2.], dtype=float32)>Описание
Использование в ноутбуках
| Используется в учебниках |
|---|
Учитывая функцию Python func, которая принимает массивы NumPy в качестве аргументов и возвращает массивы NumPy в качестве выходов, оберните эту функцию в операцию в графе TensorFlow. Следующий фрагмент кода создаёт простой граф TensorFlow, вызывающий функцию NumPy np.sinh() как операцию в графе:
def my_func(x): # x will be a numpy array with the contents of the placeholder below return np.sinh(x) input = tf.compat.v1.placeholder(tf.float32) y = tf.compat.v1.py_func(my_func, [input], tf.float32)
Примечание: Операция tf.compat.v1.py_func() имеет следующие известные ограничения:
Тело функции (т.е.
func) не будет сериализовано вGraphDef. Поэтому не следует использовать эту функцию, если вам нужно сериализовать вашу модель и восстановить её в другой среде.Операция должна выполняться в том же адресном пространстве, что и программа Python, вызывающая
tf.compat.v1.py_func(). Если вы используете распределённый TensorFlow, вам нужно запуститьtf.distribute.Serverв том же процессе, что и программа, вызывающаяtf.compat.v1.py_func(), и вы должны привязать созданную операцию к устройству в этом сервере (например, используяwith tf.device():).
Примечание: Она производит тензоры неизвестной формы и ранга, так как вычисление формы не работает с произвольным кодом Python. Если вам нужна форма, её необходимо установить на основе статически доступной информации.
Например,
import tensorflow as tf
import numpy as np
def make_synthetic_data(i):
return np.cast[np.uint8](i) * np.ones([20,256,256,3],
dtype=np.float32) / 10.
def preprocess_fn(i):
ones = tf.py_function(make_synthetic_data,[i],tf.float32)
ones.set_shape(tf.TensorShape([None, None, None, None]))
ones = tf.image.resize(ones, [224,224])
return ones
ds = tf.data.Dataset.range(10)
ds = ds.map(preprocess_fn)
| Аргументы | |
|---|---|
func | Функция Python, которая принимает объекты ndarray в качестве аргументов и возвращает список объектов ndarray (или один объект ndarray). Эта функция должна принимать столько аргументов, сколько тензоров в inp, и типы этих аргументов будут соответствовать соответствующим объектам tf.Tensor в inp. Возвращаемые ndarray должны соответствовать числу и типам, определённым Tout. Важное примечание: входные и выходные массивы NumPy ndarray функции func не гарантируются как копии. В некоторых случаях их основная память будет совместно использоваться с соответствующими тензорами TensorFlow. Изменение на месте или сохранение func входных или выходных значений в структурах данных Python без явного (np.)copy может привести к непредсказуемым последствиям. |
inp | Список объектов Tensor. |
Tout | Список или кортеж типов данных tensorflow, или один тип данных tensorflow, если их только один, указывающий, что возвращает func. |
stateful | (Булево.) Если True, функция должна считаться состоятельной. Если функция бессостоятельна, когда она получает одинаковый вход, она будет возвращать тот же выход и не будет иметь наблюдаемых побочных эффектов. Оптимизации, такие как исключение общих подвыражений, выполняются только для бессостоятельных операций. |
name | Имя операции (необязательно). |
| Возвращаемые значения | |
|---|---|
Список Tensor или один объект 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/api_docs/python/tf/compat/v1/py_func