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.
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()
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
.
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é.
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).