Se usó la API de Cloud Translation para traducir esta página.
Switch to English

tf.py_function

TensorFlow 1 versión Ver código fuente en GitHub

Envuelve una función de Python en un op TensorFlow que se ejecuta con avidez.

Se utiliza en los cuadernos

Se utiliza en la guía Se utiliza en los tutoriales

Esta función permite expresar cálculos en un gráfico TensorFlow como funciones de Python. En particular, se envuelve una función de Python func en una operación TensorFlow vez diferenciable que se ejecuta con habilitada la ejecución ansiosos. Como consecuencia, tf.py_function hace que sea posible expresar flujo de control utilizando construcciones de Python ( if , while , for , etc.), en lugar de TensorFlow construcciones de flujo de control ( tf.cond , tf.while_loop ). Por ejemplo, es posible utilizar tf.py_function para implementar la función de registro Huber:

 def log_huber(x, m):
  if tf.abs(x) <= m:
    return x**2
  else:
    return m**2 * (1 - 2 * tf.math.log(m) + tf.math.log(x**2))

x = tf.compat.v1.placeholder(tf.float32)
m = tf.compat.v1.placeholder(tf.float32)

y = tf.py_function(func=log_huber, inp=[x, m], Tout=tf.float32)
dy_dx = tf.gradients(y, x)[0]

with tf.compat.v1.Session() as sess:
  # The session executes `log_huber` eagerly. Given the feed values below,
  # it will take the first branch, so `y` evaluates to 1.0 and
  # `dy_dx` evaluates to 2.0.
  y, dy_dx = sess.run([y, dy_dx], feed_dict={x: 1.0, m: 2.0})
 

También puede utilizar tf.py_function para depurar los modelos en tiempo de ejecución utilizando herramientas de Python, es decir, puede aislar partes de su código que desea depurar, envolverlos en las funciones de Python y el inserto pdb Tracepoints o imprimir declaraciones como se desee, y envolver los funciones en tf.py_function .

Para obtener más información sobre la ejecución ansiosos, consulte la guía de Eager .

tf.py_function es similar en espíritu a tf.compat.v1.py_func , pero a diferencia de éste, el primero le permite utilizar operaciones TensorFlow en la función Python envueltos. En particular, aunque tf.compat.v1.py_func sólo funciona en CPUs y envuelve las funciones que toman matrices NumPy como entradas y devuelven matrices NumPy como salidas, tf.py_function se puede colocar en funciones GPU y envolturas que tienen tensores como entradas, ejecutar TensorFlow operaciones en sus cuerpos, y tensores de vuelta como salidas.

Al igual que tf.compat.v1.py_func , tf.py_function tiene las siguientes limitaciones con respecto a la serialización y distribución:

  • El cuerpo de la función (es decir, func ) no será serializado en una GraphDef . Por lo tanto, no debe utilizar esta función si necesita serializar su modelo y restaurarla en un entorno diferente.

  • La operación se debe ejecutar en el mismo espacio de direcciones como el programa de Python que llama tf.py_function() . Si está utilizando distribuido TensorFlow, se debe ejecutar un tf.distribute.Server en el mismo proceso que el programa que llama tf.py_function() y debe precisar la operación creada para un dispositivo en el que el servidor (por ejemplo, utilizando with tf.device(): ).

func Una función Python que acepta una lista de Tensor objetos que tienen los tipos de elementos que coinciden con la correspondiente tf.Tensor objetos en inp y devuelve una lista de Tensor objetos (o una sola Tensor , o None ) que tiene los tipos de elementos que coinciden con los valores correspondientes en Tout .
inp Una lista de Tensor objetos.
Tout Una lista o tupla de tipos de datos tensorflow o un solo tipo de datos tensorflow si sólo hay una, indicando lo func rendimientos; una lista vacía si se devuelve ningún valor (es decir, si el valor de retorno es None ).
name Un nombre para la operación (opcional).

Una lista de Tensor o un solo Tensor que func computa; una lista vacía si func regresa Ninguno.