Cette page a été traduite par l'API Cloud Translation.
Switch to English

tf.py_function

Tensorflow 1 Version Voir la source sur GitHub

Enveloppements fonction python dans une op tensorflow que les exécute avec empressement.

Utilisé dans les ordinateurs portables

Utilisé dans le guide Utilisé dans les tutoriels

Cette fonction permet d'exprimer des calculs dans un graphe de tensorflow comme fonctions Python. En particulier, elle enveloppe une fonction Python func dans une opération de tensorflow une fois dérivable qu'il exécute à l' exécution avide activée. En conséquence, tf.py_function permet d'exprimer le flux de contrôle en utilisant des constructions python ( if , while , for , etc.), à la place de constructions de contrôle de flux (tensorflow tf.cond , tf.while_loop ). Par exemple, vous pouvez utiliser tf.py_function pour implémenter la fonction huber journal:

 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})
 

Vous pouvez également utiliser tf.py_function pour déboguer vos modèles à l' exécution en utilisant des outils Python, par exemple, vous pouvez isoler des parties de votre code que vous souhaitez déboguer, les envelopper dans des fonctions Python et insérer pdb tracepoints ou imprimer des déclarations comme on le souhaite, et envelopper les fonctions tf.py_function .

Pour plus d' informations sur l' exécution hâte, voir le Guide Eager .

tf.py_function est similaire dans l' esprit tf.compat.v1.py_func , mais contrairement à ce dernier, l'ancien vous permet d' utiliser des opérations tensorflow dans la fonction Python enveloppé. En particulier, alors que tf.compat.v1.py_func ne fonctionne que sur les processeurs et enveloppements fonctions qui prennent des tableaux numpy comme entrées et renvoient des tableaux numpy comme sorties, tf.py_function peut être placé sur les fonctions et enveloppements GPU qui prennent tenseurs comme entrées, exécuter tensorflow opérations dans leur corps, et tenseurs de retour en tant que sorties.

Comme tf.compat.v1.py_func , tf.py_function présente les limitations suivantes en ce qui concerne la sérialisation et la distribution:

  • Le corps de la fonction (c. -à- func ) ne sera pas publié en feuilleton dans un GraphDef . Par conséquent, vous ne devriez pas utiliser cette fonction si vous avez besoin de sérialisation votre modèle et restaurer dans un environnement différent.

  • L'opération doit fonctionner dans le même espace d'adressage que le programme Python qui appelle tf.py_function() . Si vous utilisez une périphérie tensorflow, vous devez exécuter un tf.distribute.Server dans le même processus que le programme qui appelle tf.py_function() et vous devez épingler l'opération créée à un dispositif dans ce serveur (par exemple , en utilisant with tf.device(): ).

func Une fonction Python qui accepte une liste de Tensor objets ayant des types d'éléments qui correspondent à la correspondante tf.Tensor objets en inp et retourne une liste de Tensor objets (ou un seul Tensor , ou None ) ayant des types d'éléments qui correspondent aux valeurs correspondantes dans Tout .
inp Une liste des Tensor objets.
Tout Une liste ou tuple des types de données tensorflow ou un seul type de données tensorflow s'il n'y a qu'un seul, ce qui indique ce que func rendement; une liste vide si aucune valeur est renvoyée ( par exemple, si la valeur de retour est None ).
name Un nom pour l'opération (en option).

Une liste de Tensor ou une Tensor qui func calcule; une liste vide si func retourne None.