K. clear_session() est utile lorsque vous êtes à la création de plusieurs modèles dans la succession, comme lors de l'hyper-paramètre de recherche ou de validation croisée. Chaque modèle vous former ajoute des nœuds (potentiellement se chiffrent en milliers) pour le graphique. TensorFlow exécute l'ensemble du graphique à chaque fois que vous (ou Keras) appel tf.Session.run() ou tf.Tenseur.la fonction eval(), de sorte que vos modèles de plus en plus lente à former, et vous pouvez également exécuter de mémoire. De compensation de la session supprime tous les nœuds de la gauche au cours des précédents modèles, la libération de la mémoire et de la prévention de ralentissement.
Edit 21/06/19:
TensorFlow est paresseux-évalué par défaut. TensorFlow opérations ne sont pas évalués immédiatement: la création d'un tenseur ou de faire des opérations à il crée des nœuds dans un graphe de flux de données. Les résultats sont calculés en évaluant les parties pertinentes du graphe en une seule fois lorsque vous appelez tf.Session.run() ou tf.Tenseur.la fonction eval(). C'est donc TensorFlow pouvez construire un plan d'exécution qui alloue les opérations qui peuvent être effectuées en parallèle à différents dispositifs. Il peut également plier nœuds adjacents ensemble ou supprimer redondante (p. ex. si vous concaténées deux tenseurs et, plus tard, de les diviser à nouveau inchangé). Pour plus de détails, voir https://www.tensorflow.org/guide/graphs
Tous vos TensorFlow les modèles sont stockés dans le graphique comme une série de tenseurs et tenseur des opérations. Le fonctionnement de base de l'apprentissage de la machine est le tenseur de produit scalaire - la sortie d'un réseau de neurones est le produit scalaire de la matrice d'entrée et le réseau des poids. Si vous avez une seule couche de perceptron et 1 000 formation des échantillons, puis chaque époque crée au moins 1 000 tenseur des opérations. Si vous avez de 1 000 époques, alors votre graphe contient au moins 1 000 000 nœuds à la fin, avant la prise en compte de prétraitement, le traitement, et des modèles plus complexes, tels que les récurrente des filets, le codeur-décodeur, attention les modèles, etc.
Le problème, c'est que finalement le graphique serait trop grand pour tenir dans la mémoire vidéo (6 GO dans mon cas), donc TF faisait la navette parties du graphe à partir de la vidéo à la mémoire principale et le dos. Finalement, il serait même trop volumineux pour la mémoire principale (12 GO) et commencer à se déplacer entre la mémoire principale et le disque dur. Inutile de dire que cela fait des choses incroyable, et de plus en plus lente que la formation s'est passé. Avant de développer ce enregistrez-modèle/clair-session/reload-modèle de flux, j'ai calculé que, à chaque époque, le taux de ralentissement j'ai vécu, mon modèle aurait pris plus de temps que l'âge de l'univers pour terminer la formation. Avertissement: je n'ai pas utilisé TensorFlow en près d'un an, donc cela peut avoir changé. Je me souviens d'y être tout à fait un peu de GitHub questions autour de cette alors j'espère qu'il a depuis été corrigé.