web-dev-qa-db-fra.com

la session de fermeture dans tensorflow ne réinitialise pas le graphique

Le nombre de nœuds disponibles dans le graphique en cours ne cesse d'augmenter à chaque itération. Cela semble peu intuitif puisque la session est fermée et que toutes ses ressources devraient être libérées . Quelle est la raison pour laquelle les nœuds précédents restent en attente même lors de la création d'une nouvelle session? Voici mon code:

for i in range(3):
    var = tf.Variable(0)
    sess = tf.Session(config=tf.ConfigProto())
    with sess.as_default():
        tf.global_variables_initializer().run()
        print(len(sess.graph._nodes_by_name.keys()))
    sess.close() 

Il produit:

5
10
15
9
titus

La session de fermeture ne réinitialise pas le graphique par conception. Si vous voulez réinitialiser le graphique, vous pouvez appeler tf.reset_default_graph() comme ceci

for _ in range(3):
    tf.reset_default_graph()
    var = tf.Variable(0)
    with tf.Session() as session:
        session.run(tf.global_variables_initializer())
        print(len(session.graph._nodes_by_name.keys()))

ou tu peux faire quelque chose comme ça

for _ in range(3):
    with tf.Graph().as_default() as graph:
        var = tf.Variable(0)
        with tf.Session() as session:
            session.run(tf.global_variables_initializer())
            print(len(graph._nodes_by_name.keys()))
14
Mad Wombat

J'ai rencontré des problèmes de fermeture de session lors de l'exécution d'un programme TensorFlow à partir de Spyder. Les cellules RNN semblent rester et chercher à en créer de nouvelles du même nom semble poser problème. Ceci est probablement dû au fait que, lors de l'exécution à partir de Spyder, la session TensorFlow basée sur c ne se ferme pas correctement, même si le programme a terminé son "exécution" depuis Spyder. Spyder doit être redémarré pour obtenir une nouvelle session. Lors de l'exécution à partir de Spyder, la définition de "reuse = True" sur les cellules permet de résoudre ce problème. Cependant, cela ne semble pas être un mode valide pour la programmation itérative lors de la formation d'une cellule RNN. Dans ce cas, certains résultats/comportements inattendus peuvent se produire sans que l'observateur sache ce qui se passe. 

2
M. Mortazavi