解決Tensorflow 記憶體洩露問題

2022-10-04 15:03:19 字數 1778 閱讀 8166

使用tensorflow進行程式設計時,經常遇到操作不當,帶來的記憶體洩露問題,這裡有乙個可以幫助debug問程式設計客棧題所在方法:

使用tf.graph.finalize()把運算圖變成唯讀的,從而對圖的修改都會報錯,從而找到記憶體洩露的定點。

目前我出現過記憶體洩露問題的有兩處:

1.session和graph沒有釋放記憶體。按照資料的說法,使用了with關鍵字可以在session異常退出時也釋放記憶體,否則要用session.close()關閉session。**如下:

w tf.session() as session:

#codes

#一般使用with以後就會釋放記憶體,否則執行如下釋放

session.close()

del session

另一方面,我是在session中載入graph(訓練好的模型),導致每次關閉程式再執行,graph出現重複載入的現象。錯誤**示例:

with tf.seesion() as session:

# 在session內部載入儲存好的g

s**er = tf.train.import_meta_graph('./cnn_cracks.meta')

s**er.restore(session, "./cnn_cracks")

# codes

此處,在一次執行session時會載入一次graph,一次執行的時候沒問題,但多次執行(除錯時),每次graph都會載入到記憶體而不被釋放,因而造成記憶體洩露。

正確的做法如下:

# 用with新建乙個graph,這樣在執行完以及異常退出時就會釋放記憶體

graph = tf.gragh()

with graph.as_default():

s**er = tf.train.import_meta_graph('./cnn_cracks.meta')

with tf.session(graph=graph) as session:

s**er.restore(session, "./cnn_cracks")

2.一些tensorflow的運算似乎也會修改圖,原因未明。所以在www.cppcns.com在訓練裡面把所有屬於tensorflow的運算都寫進去,執行session.run返回的只能是唯讀。

##錯誤**

#訓練graph = tf.graph()

with graph.as_default():

#codes

predict = tf.nn.softmax(model(data))

#**,這裡訓練檔案與**檔案是分離的

with tf.session(graph=graph) as session:

#codes

predict = session.run(predict, feed_dict=)

prediction = tf.argmax(predict, -1) #這裡會對圖進行修改

##正確**

#訓練graph = tf.graph()

with graph.as_default():

#codes

predict = tf.argmax(tf.nn.softmax(model(data)), -1)

#**with tf.session(graph=graph) as session:

#codes

prediction = session.run(predict, feed_dict=)

本文標題: 解決tensorflow 記憶體洩露問題

本文位址: /jiaoben/python/299565.html

使用 CrtSetDbgFlag檢測記憶體洩露

一 介紹 動態分配 記憶體是c c 程式語言乙個最強的特點,但是中國哲學家孫 sun tzu,我不知道是誰?那位知道?指出,最強的同時也是最弱的。這句話對c c 應用來說非常正確,在記憶體處理出錯的地方通常就是bugs產生的地方。乙個最敏感和難檢測的bug就是記憶體洩漏 沒有把前邊分配的記憶體成功釋...

STM SETIMAGE引起的gdi記憶體洩露

最近給程式加了乙個動畫功能後,發現程式會引起及其嚴重的記憶體洩露,找了半天發現是呼叫stm setimage引起的。素以在此將使用stm setimage遇到的問題記錄一下。我的程式將動畫的所有幀提前載入後用定時器迴圈用stm setimage把點陣圖控制代碼傳送到視窗顯示,發現沒顯示一次就洩露好幾...

使用memwatch跟蹤linux記憶體洩漏

參考 根據log可以查詢出申請了卻沒有釋放記憶體的行號。一 簡介 memwatch可以跟蹤程式中的記憶體洩漏和錯誤,能檢測雙重釋放 double free 錯誤釋放 erroneousfree 沒有釋放的記憶體 unfreed memory 溢位 overflow 下溢 underflow 等。解壓...