解決TensorFlow訓(xùn)練內(nèi)存不斷增長(zhǎng),進(jìn)程被殺死問(wèn)題
TensorFlow訓(xùn)練時(shí),遇到內(nèi)存不斷增長(zhǎng),最終導(dǎo)致內(nèi)存不足,進(jìn)程被殺死。
在這里我不準(zhǔn)備對(duì)造成這一現(xiàn)象的所有原因進(jìn)行探討,只是記錄一下我在項(xiàng)目中遇到的這一問(wèn)題,下面將對(duì)我遇到的內(nèi)存不斷增長(zhǎng)的原因進(jìn)行分析。
在TensorFlow中構(gòu)造圖,是將一些op作為節(jié)點(diǎn)加入圖中,在run之前,是需要構(gòu)造好一個(gè)圖的,所以在run的時(shí)候,如果run圖中不存在的節(jié)點(diǎn),TensorFlow就會(huì)將節(jié)點(diǎn)加入圖中,隨著不斷的迭代,造成內(nèi)存不斷的增長(zhǎng),從而導(dǎo)致內(nèi)存不足。
下面舉一個(gè)很容易發(fā)現(xiàn)這個(gè)問(wè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是圖中的兩個(gè)節(jié)點(diǎn),在while循環(huán)中run(x)或者run(y)都是不存在問(wèn)題的,但是上例中我們使用的時(shí)run(x+y),而在TensorFlow的圖中是不存在x+y這個(gè)節(jié)點(diǎn)的,所以在run的時(shí)候,圖中會(huì)不斷的創(chuàng)建該節(jié)點(diǎn),最終導(dǎo)致了內(nèi)存不足。這個(gè)例子很容易理解,這樣的問(wèn)題也很容易發(fā)現(xiàn)。
下面,將舉一個(gè)不是那么容易發(fā)現(xiàn)的問(wè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]))
這個(gè)例子是創(chuàng)建一個(gè)shape為[4,1]的變量對(duì)象,test為圖中的一個(gè)節(jié)點(diǎn),但是在我們實(shí)際使用時(shí),我們可能并不需要test里的所有數(shù)據(jù),加入只需要一個(gè)數(shù)據(jù)test[0],當(dāng)我們使用run(test[0])時(shí),test[0]并不是圖中的節(jié)點(diǎn),該節(jié)點(diǎn)就會(huì)在圖中創(chuàng)建。上面的例子并沒(méi)有使用循環(huán),所以增加了節(jié)點(diǎn),但是也不會(huì)造成內(nèi)存的不足,當(dāng)使用了循環(huán)時(shí),就需要注意了。
解決辦法:run圖中存在的節(jié)點(diǎn),對(duì)返回的結(jié)果進(jìn)行處理,得到想要的結(jié)果,不要在run里面對(duì)節(jié)點(diǎn)處理(處理后的節(jié)點(diǎn)可能不是圖中的節(jié)點(diǎn))。
以上這篇解決TensorFlow訓(xùn)練內(nèi)存不斷增長(zhǎng),進(jìn)程被殺死問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Tensorflow訓(xùn)練MNIST手寫(xiě)數(shù)字識(shí)別模型
- tensorflow實(shí)現(xiàn)訓(xùn)練變量checkpoint的保存與讀取
- Tensorflow訓(xùn)練模型越來(lái)越慢的2種解決方案
- TensorFlow實(shí)現(xiàn)保存訓(xùn)練模型為pd文件并恢復(fù)
- tensorflow獲取預(yù)訓(xùn)練模型某層參數(shù)并賦值到當(dāng)前網(wǎng)絡(luò)指定層方式
- tensorflow模型繼續(xù)訓(xùn)練 fineturn實(shí)例
- tensorflow如何繼續(xù)訓(xùn)練之前保存的模型實(shí)例
- Tensorflow實(shí)現(xiàn)在訓(xùn)練好的模型上進(jìn)行測(cè)試
- tensorflow保持每次訓(xùn)練結(jié)果一致的簡(jiǎn)單實(shí)現(xiàn)
相關(guān)文章
python實(shí)現(xiàn)比較兩段文本不同之處的方法
這篇文章主要介紹了python實(shí)現(xiàn)比較兩段文本不同之處的方法,涉及Python針對(duì)文本與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05深入探究Flask的兩個(gè)高級(jí)特性之藍(lán)圖和JWT認(rèn)證
本文將探討 Flask 的兩個(gè)高級(jí)特性:藍(lán)圖(Blueprints)和 JSON Web Token(JWT)認(rèn)證,藍(lán)圖讓我們可以將應(yīng)用模塊化,以便更好地組織代碼;而 JWT 認(rèn)證是現(xiàn)代 Web 應(yīng)用中常見(jiàn)的一種安全機(jī)制,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08python實(shí)現(xiàn)自動(dòng)發(fā)送報(bào)警監(jiān)控郵件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)發(fā)送報(bào)警監(jiān)控郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本
這篇文章主要介紹了詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5不規(guī)則窗口實(shí)現(xiàn)與顯示GIF動(dòng)畫(huà)的詳細(xì)方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5不規(guī)則窗口與顯示GIF動(dòng)畫(huà)的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03