[解決済み] TensorFlowでのメモリリーク
質問
TensorFlowでメモリリークが発生しました。参考にしたのは Tensorflow : セッションを閉じてもメモリリーク? という回答があり、そのアドバイスに従ったところ、問題が解決したようです。しかし、それはここでは動作しません。
メモリリークを再現するために、簡単な例を作ってみました。まず、この関数(ここで手に入れたものです。 Pythonで現在のCPUとRAMの使用率を取得するには? ) を使って、Python プロセスのメモリ使用量をチェックします。
def memory():
import os
import psutil
pid = os.getpid()
py = psutil.Process(pid)
memoryUse = py.memory_info()[0]/2.**30 # memory use in GB...I think
print('memory use:', memoryUse)
すると、呼び出すたびに
build_model
関数を使用すると、メモリの使用量が増えます。
ここでは
build_model
関数でメモリリークが発生しています。
def build_model():
'''Model'''
tf.reset_default_graph()
with tf.Graph().as_default(), tf.Session() as sess:
tf.contrib.keras.backend.set_session(sess)
labels = tf.placeholder(tf.float32, shape=(None, 1))
input = tf.placeholder(tf.float32, shape=(None, 1))
x = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense1')(input)
x1 = tf.contrib.keras.layers.Dropout(0.5)(x)
x2 = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense2')(x1)
y = tf.contrib.keras.layers.Dense(1, activation='sigmoid', name='dense3')(x2)
loss = tf.reduce_mean(tf.contrib.keras.losses.binary_crossentropy(labels, y))
train_step = tf.train.AdamOptimizer(0.004).minimize(loss)
#Initialize all variables
init_op = tf.global_variables_initializer()
sess.run(init_op)
sess.close()
tf.reset_default_graph()
return
私は、ブロックの使用は
with tf.Graph().as_default(), tf.Session() as sess:
とし、次に
セッションを閉じる
と
呼び出し
tf.reset_default_graph
は、TensorFlowが使用するすべてのメモリをクリアすることになります。どうやらそうではないようです。
メモリリークは以下のように再現できます。
memory()
build_model()
memory()
build_model()
memory()
これの出力は、(私のコンピュータの場合):
memory use: 0.1794891357421875
memory use: 0.184417724609375
memory use: 0.18923568725585938
明らかに、TensorFlowによって使用されたすべてのメモリが、その後解放されていないことがわかります。なぜでしょうか?
の呼び出しを100回繰り返し、メモリの使用量をプロットしてみました。
build_model
そして、これが私の得たものです。
メモリリークがあることを示すことになると思うのですが。
解決方法は?
この問題はTensorflowのバージョン0.11に起因していました。今日現在、Tensorflow 0.12がリリースされ、このバグは解決されています。新しいバージョンにアップグレードすれば、期待通りに動作するはずです。を呼び出すことを忘れないでください。
tf.contrib.keras.backend.clear_session()
を最後に追加してください。
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python カメの描画コマンドとその例
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
任意波形を生成してtxtで保存するためのPython実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] java.lang.OutOfMemoryError "に対処する。PermGen space "エラーに対処する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python jiabaライブラリの使用方法について説明
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] グラフからノードを削除、またはデフォルトグラフ全体をリセット
-
[解決済み] Pythonで現在のCPUとRAMの使用率を取得する方法は?