2016-04-11 6 views
7

keras.models.Sequentialモデルを初期化するラッパークラスを作成しました。トレーニングプロセスを開始し、進捗状況を監視するための2つのメソッドがあります。私はmainファイルでこのクラスをインスタンス化し、トレーニングプロセスを実行します。かなり世俗的なもの。テンソルフローバックエンドでKerasを使用しているときにメモリを制御する方法は?

マイ質問は次のとおりです。

tensorflowによって割り当てられたすべてのGPUのメモリを解放する方法。私は運を試してみました次:セッションが終了し、Noneにリセットされた後でも

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) 

を、nvidia-smiは、メモリ使用量の減少を反映していません。何か案は?

アイデア

私のNeuralNetクラスに__exit__メソッドを追加して、それをインスタンス化する意味があります:私はこの方法でkerasモデルのリソースを解放する必要がありますどのように

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

テスト環境

私は3つのGTX 960基のGPUでのUbuntu 14.04上でiPythonノートブックを使用しています。

参考:私のために、次の作品は、すべての実行のための私のJupyterノートにKeras層の状態を再初期化する

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

あなたがこれに対する解決策を見つけたのかどうか疑問に思っていました。テンソルフロー(ケラ経由で)がPythonプロセスを終了せずにメモリを解放する方法を見つけることができないようです。 –

+0

いいえ。ケラスから離れました。グラフとセッションでテンソルフローのみを使用する。 – Chintak

+0

K.clear_session()を試しましたか? – 0xF

答えて

1

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

また、グラフは毎回命名され、

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

注:ノートブックは、使用して実行されます、私はまだKerasとtensorflowの概念の周りに私の頭をラップしようとしていますが、上記の作品(私は、彼らはドキュメントとサンプルに不十分で説明されていると考えています)。

+0

セッションをクリアすると、既存のモデルとその重みがすべて保持されますか? –

+0

ウェイトはクリアされ、グラフは保持されます。どういうわけか私は通知を受けていません... – xor007

関連する問題