Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.py_func

Оборачивает функцию Python и использует её как операцию TensorFlow.

tf.compat.v1.py_func(
    func, inp, Tout, stateful=True, name=None
)

Миграция на TF2

Внимание: Этот API был разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как мигрировать с этого API на эквивалент в TensorFlow v2. Обратитесь к руководству по миграции TensorFlow v1 на TensorFlow v2 по адресу https://www.tensorflow.org/guide/migrate, чтобы получить инструкции по миграции остальной части вашего кода.

Это имя устарело и удалено в 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/versions/r2.9/api_docs/python/tf/compat/v1/py_func

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API