Spec-Zone.ru › TensorFlow

tf.compat.v1.py_func

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

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

Переход на TF2

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

Это имя было устаревшим и удалено в 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)>

Описание

Использование в ноутбуках

Используется в учебниках
  • Исследование TensorFlow Probability: Оценка ковариации

Учитывая функцию 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

Spec-Zone.ru

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