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 на эквивалент в 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