wake-up-neo.com

Wofür brauche ich K.clear_session () und del model für (Keras with Tensorflow-gpu)?

Was mache ich
Ich trainiere und verwende ein Faltungsneuronennetzwerk (CNN) zur Bildklassifizierung unter Verwendung von Keras mit Tensorflow-gpu als Backend.

Was verwende ich
- PyCharm Community 2018.1.2
- beide Python 2.7 und 3.5 (aber nicht beide gleichzeitig)
- Ubuntu 16.04
- Keras 2.2.0
- Tensorflow-GPU 1.8.0 als Backend

Was ich wissen will
In vielen Codes sehe ich Leute, die verwenden

from keras import backend as K 

# Do some code, e.g. train and save model

K.clear_session()

oder löschen Sie das Modell nach der Verwendung:

del model

Die Keras-Dokumentation sagt zu clear_session: "Zerstört den aktuellen TF-Graphen und erstellt einen neuen. Nützlich, um Unordnung durch alte Modelle/Ebenen zu vermeiden." - https://keras.io/backend/

Was ist der Sinn und sollte ich es auch tun? Beim Laden oder Erstellen eines neuen Modells wird mein Modell trotzdem überschrieben. Warum also?

7
benjamin

del löscht die Variable in python und da model eine Variable ist, löscht del model sie, aber das TF-Diagramm hat keine Änderungen (TF ist Ihr Keras-Backend). ) zerstört das aktuelle TF-Diagramm und erstellt ein neues. Das Erstellen eines neuen Modells scheint ein unabhängiger Schritt zu sein, aber vergessen Sie das Backend nicht :)

2
Tawej

K.clear_session () ist nützlich, wenn Sie mehrere Modelle hintereinander erstellen, z. B. während der Suche nach Hyperparametern oder der Kreuzvalidierung. Jedes Modell, das Sie trainieren, fügt dem Diagramm Knoten (möglicherweise Tausende in Tausendern) hinzu. TensorFlow führt den gesamten Graphen aus, wenn Sie (oder Keras) tf.Session.run () oder tf.Tensor.eval () aufrufen, sodass Ihre Modelle langsamer und langsamer trainiert werden und möglicherweise auch der Speicher ausgeht. Durch das Löschen der Sitzung werden alle Knoten entfernt, die von vorherigen Modellen übrig geblieben sind. Dadurch wird Speicherplatz freigegeben und eine Verlangsamung verhindert.

1
Chris Swinchatt