5 votes

Qu'est-ce que le traçage par rapport à la fonction tf.

Le mot "traçage" est mentionné fréquemment dans le guide de TensorFlow comme Meilleures performances avec tf.function

  1. Qu'est-ce que le "traçage" exactement, est-ce qu'il se réfère à la génération du graphique comme un résultat de l'appel de la fonction tf.pour la première fois (et ensuite en fonction des arguments) ? en fonction des arguments) ?
  2. Que se passe-t-il lorsqu'une partie seulement du calcul est annotée de @tf.function va-t-il mélanger l'exécution rapide et l'exécution graphique ?

5voto

jdehesa Points 22254
  1. Oui, "tracer" signifie exécuter une fonction Python et "enregistrer" ses opérations TensorFlow dans un graphique. Notez que le code tracé peut ne pas correspondre exactement au code Python écrit, si Autograph a effectué une transformation. Idéalement, le traçage n'est effectué qu'une seule fois, la première fois que la fonction est appelée, de sorte que les appels ultérieurs puissent utiliser directement le graphe tracé et sauvegarder l'exécution du code Python. Comme vous le dites, cependant, les appels ultérieurs peuvent nécessiter de retracer la fonction en fonction des arguments donnés, comme expliqué dans le lien que vous avez posté.

  2. Vous pouvez appeler un @tf.function à partir d'une fonction qui fonctionne en mode "eager", auquel cas, oui, elle "mélangera" en quelque sorte les deux modes. Mais si vous appelez une fonction non annotée depuis une fonction @tf.function En d'autres termes, il n'est pas possible de revenir temporairement au mode eager/Python à partir d'un fichier de type @tf.function . C'est la raison pour laquelle, à un moment donné, il a été suggéré que l'on ne devait annoter que les fonctions de niveau supérieur, car les fonctions de niveau inférieur seraient de toute façon "grapillées" également - bien qu'il ne soit pas si évident de savoir si l'on doit ou non annoter une fonction, cf. Dois-je utiliser @tf.function pour toutes les fonctions ? y cette discussion sur GitHub .

EDIT : Lorsque je dis "vous ne pouvez pas revenir temporairement au mode eager/Python à partir d'une @tf.function ", je veux dire @tf.function ne peut pas sortir du mode "tracé". Bien sûr, en utilisant tf.numpy_function o tf.py_function vous pouvez avoir une fonction tracée qui utilise le mode eager/Python, qui sera encapsulée dans une opération faisant partie du graphe tracé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X