2016-04-11 6 views
7

Ich habe eine Wrapperklasse erstellt, die ein keras.models.Sequential Modell initialisiert und eine Reihe von Methoden zum Starten des Trainingsprozesses und Überwachen des Fortschritts bietet. Ich instanziiere diese Klasse in meiner main Datei und führe den Trainingsprozess durch. Ziemlich banale Sachen.Wie kann man den Speicher während der Verwendung von Keras mit Tensorflow-Backend steuern?

Meine Frage ist:

Wie alle GPU-Speicher von tensorflow zugewiesen zu befreien. Ich habe versucht, die folgenden ohne Glück:

import keras.backend.tensorflow_backend as K 
with K.get_session() as sess: 
    K.set_session(sess) 
    import tensorflow as tf 
    from neural_net import NeuralNet 
    with tf.device('/gpu:0'): 
     nn = NeuralNet('config', train_db_path, test_db_path) 
     nn.train(1000, 1) 
     print 'Done' 
    K._SESSION.close() 
    K.set_session(None) 

Auch nach der Sitzung wurde geschlossen und zurückgesetzt None, hat nvidia-smi keine Verringerung der Speichernutzung widerspiegeln. Irgendwelche Ideen?

Idee

Wäre es sinnvoll sein, eine __exit__ Methode meiner NeuralNet Klasse hinzuzufügen und instanziiert es als:

with NeuralNet() as nn: 
    nn.train(1000, 1) 

Wie soll ich bei diesem Verfahren der Ressourcen des keras Modells zu ?

Testumgebung

ich auf einem Ubuntu 14.04 mit 3 GTX 960 GPUs ipython Notebook bin mit.

Referenz:

  1. https://github.com/fchollet/keras/issues/2102
  2. https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8
+1

fragte sich, ob Sie eine Lösung für dieses Problem gefunden haben! Ich kann nicht scheinen, einen Weg zu finden, um Tensorflow zu haben (über Keras) den Speicher freizugeben, ohne den python Prozess zu verlassen –

+0

Nein. Von Keras weggezogen. Verwenden Sie nur Tensorflow mit Grafiken und Sitzungen. – Chintak

+0

Haben Sie versucht, K.clear_session() – 0xF

Antwort

1

Die folgenden Werke für mich den Zustand der Keras Schichten in für jeden Lauf meines Jupyter Notebook neu zu initialisieren:

from keras import backend as K 
K.clear_session() 
sess = tf.Session() 
K.set_session(sess) 

Außerdem wird der Graph jedes Mal benannt und zurückgesetzt, wenn Notebook läuft mit:

graphr = K.get_session().graph 
with graphr.as_default(): 
    #...graph building statements... 

Hinweis: Ich versuche immer noch meinen Kopf wickeln sich um die Konzepte von Keras und tensorflow (ich glaube, sie sind schlecht in der Dokumentation und Beispielen beschrieben), aber die oben genannten Arbeiten.

+0

Löscht eine Sitzung alle vorhandenen Modelle und ihre Gewichtungen? –

+0

Gewichte werden gelöscht, Grafiken werden beibehalten, Entschuldigung für verspätete Antwort. Irgendwie habe ich keine Benachrichtigungen erhalten ... – xor007

Verwandte Themen