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