解決TensorFlow訓練內(nèi)存不斷增長,進程被殺死問題
TensorFlow訓練時,遇到內(nèi)存不斷增長,最終導致內(nèi)存不足,進程被殺死。
在這里我不準備對造成這一現(xiàn)象的所有原因進行探討,只是記錄一下我在項目中遇到的這一問題,下面將對我遇到的內(nèi)存不斷增長的原因進行分析。
在TensorFlow中構造圖,是將一些op作為節(jié)點加入圖中,在run之前,是需要構造好一個圖的,所以在run的時候,如果run圖中不存在的節(jié)點,TensorFlow就會將節(jié)點加入圖中,隨著不斷的迭代,造成內(nèi)存不斷的增長,從而導致內(nèi)存不足。
下面舉一個很容易發(fā)現(xiàn)這個問題的例子:
import tensorflow as tf x = tf.Variable(tf.constant(1)) y = tf.constant(2) sess = tf.Session() sess.run(tf.global_variables_initializer()) while True: print(sess.run(x+y))
在上面的例子中,x,y是圖中的兩個節(jié)點,在while循環(huán)中run(x)或者run(y)都是不存在問題的,但是上例中我們使用的時run(x+y),而在TensorFlow的圖中是不存在x+y這個節(jié)點的,所以在run的時候,圖中會不斷的創(chuàng)建該節(jié)點,最終導致了內(nèi)存不足。這個例子很容易理解,這樣的問題也很容易發(fā)現(xiàn)。
下面,將舉一個不是那么容易發(fā)現(xiàn)的問題:
import tensorflow as tf test = tf.get_variable('test', shape=[4, 1], initializer=tf.random_normal_initializer(stddev=0.1)) init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) print(sess.run(test[0]))
這個例子是創(chuàng)建一個shape為[4,1]的變量對象,test為圖中的一個節(jié)點,但是在我們實際使用時,我們可能并不需要test里的所有數(shù)據(jù),加入只需要一個數(shù)據(jù)test[0],當我們使用run(test[0])時,test[0]并不是圖中的節(jié)點,該節(jié)點就會在圖中創(chuàng)建。上面的例子并沒有使用循環(huán),所以增加了節(jié)點,但是也不會造成內(nèi)存的不足,當使用了循環(huán)時,就需要注意了。
解決辦法:run圖中存在的節(jié)點,對返回的結(jié)果進行處理,得到想要的結(jié)果,不要在run里面對節(jié)點處理(處理后的節(jié)點可能不是圖中的節(jié)點)。
以上這篇解決TensorFlow訓練內(nèi)存不斷增長,進程被殺死問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python實現(xiàn)自動發(fā)送報警監(jiān)控郵件
這篇文章主要為大家詳細介紹了python實現(xiàn)自動發(fā)送報警監(jiān)控郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認版本
這篇文章主要介紹了詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實現(xiàn)與顯示GIF動畫的詳細方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動畫的詳細方法與實例,需要的朋友可以參考下2020-03-03