web-dev-qa-db-fra.com

Supprimer des nœuds du graphique ou réinitialiser le graphique entier par défaut

Lorsque vous utilisez le graphe global par défaut, est-il possible de supprimer des nœuds après leur ajout ou de réinitialiser le graphe par défaut pour le vider? Lorsque je travaille avec TF de manière interactive dans IPython, je dois redémarrer le noyau à plusieurs reprises. J'aimerais pouvoir expérimenter des graphiques plus facilement si possible.

61

Mise à jour du 11/2/2016

tf.reset_default_graph()

Vieux trucs

Il y a reset_default_graph, mais ne fait pas partie de l'API publique (je pense que ça devrait l'être, quelqu'un veut-il déposer un problème sur GitHub?)

Mon travail pour réinitialiser les choses est la suivante:

from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.InteractiveSession()
93
Yaroslav Bulatov

Par défaut, une session est construite autour du graphique par défaut. Pour éviter de laisser des nœuds morts dans la session, vous devez contrôler le graphe par défaut ou utiliser un graphe explicite.

  • Pour effacer le graphique par défaut, vous pouvez utiliser la fonction tf.reset_default_graph .

    tf.reset_default_graph()
    sess = tf.InteractiveSession()
    
  • Vous pouvez également construire explicitement un graphique et éviter d'utiliser celui par défaut. Si vous utilisez un Session normal, vous devrez créer entièrement le graphique avant de construire la session. Pour InteractiveSession, vous pouvez simplement déclarer le graphique et l'utiliser comme contexte pour déclarer d'autres modifications:

    g = tf.Graph()
    sess = tf.InteractiveSession(graph=g)
    with g.asdefault():
        # Put variable declaration and other tf operation
        # in the graph context
        ....
        b = tf.matmul(A, x)
        ....
    
     sess.run([b], ...)
    

EDIT: Pour les versions récentes de tensorflow (1.0+), la fonction correcte est g.as_default .

34
Thomas Moreau

Les cellules du bloc-notes IPython/Jupyter conservent l'état entre les exécutions d'une cellule.

Créez un graphique personnalisé:

def main():
    # Define your model
    data = tf.placeholder(...)
    model = ...

with tf.Graph().as_default():
    main()

Une fois exécuté, le graphique est nettoyé.

5
Serge

Je ne sais pas si je suis confronté au même problème, mais

tf.keras.backend.clear_session()

au début de la cellule dans laquelle le modèle (Keras, dans mon cas) a été construit et formé a aidé à "réduire le fouillis" de sorte que seul le graphique actuel reste dans la visualisation TensorBoard après des exécutions répétées de la même cellule.

Environnement: TensorFlow 2.0 (tensorflow-gpu==2.0.0b1) dans Colab avec TensorBoard intégré (à l’aide du %load_ext tensorboard tour).

0
John Doe