您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了如何解決基于Keras循環訓練模型跑數據時內存泄漏問題,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
在使用完模型之后,添加這兩行代碼即可清空之前model占用的內存:
import tensorflow as tf from keras import backend as K K.clear_session() tf.reset_default_graph()
補充知識:keras 多個模型測試階段速度越來越慢問題的解決方法
問題描述
在實際應用或比賽中,經常會用到交叉驗證(10倍或5倍)來提高泛化能力,這樣在預測時需要加載多個模型。常用的方法為
mods = [] from keras.utils.generic_utils import CustomObjectScope with CustomObjectScope({}): for model_file in tqdm.tqdm(model_files): mod = keras.models.load_model(model_file) mods.append(mod) return mods
使用這種方式時會發現,剛開始模型加載速度很快,但隨著加載的模型數量增多,加載速度越來越慢,甚至延長了3倍以上。那么為什么會出現這種現象呢?
原因
由于tensorflow的圖是靜態圖,但是如果直接加在不同的圖(即不同的模型),應該都會存在內存中,原有的圖并不會釋放,因此造成了測試速度越來越慢。
解決方案
知道了原因,解決方案也就有了:每加載一個模型就對所有測試數據進行評估,同時在每次加載模型前,對當前session進行重置。keras的tf后臺提供了clear_session方法來清除session
import keras.backend.tensorflow_backend as KTF KTF.clear_session() session = tf.Session(config=config) KTF.set_session(session) with CustomObjectScope({}): model = keras.models.load_model(model_file) return model
以上就是關于如何解決基于Keras循環訓練模型跑數據時內存泄漏問題的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。