基于Keras 循環(huán)訓(xùn)練模型跑數(shù)據(jù)時(shí)內(nèi)存泄漏的解決方式
在使用完模型之后,添加這兩行代碼即可清空之前model占用的內(nèi)存:
import tensorflow as tf from keras import backend as K K.clear_session() tf.reset_default_graph()
補(bǔ)充知識(shí):keras 多個(gè)模型測(cè)試階段速度越來越慢問題的解決方法
問題描述
在實(shí)際應(yīng)用或比賽中,經(jīng)常會(huì)用到交叉驗(yàn)證(10倍或5倍)來提高泛化能力,這樣在預(yù)測(cè)時(shí)需要加載多個(gè)模型。常用的方法為
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
使用這種方式時(shí)會(huì)發(fā)現(xiàn),剛開始模型加載速度很快,但隨著加載的模型數(shù)量增多,加載速度越來越慢,甚至延長了3倍以上。那么為什么會(huì)出現(xiàn)這種現(xiàn)象呢?
原因
由于tensorflow的圖是靜態(tài)圖,但是如果直接加在不同的圖(即不同的模型),應(yīng)該都會(huì)存在內(nèi)存中,原有的圖并不會(huì)釋放,因此造成了測(cè)試速度越來越慢。
解決方案
知道了原因,解決方案也就有了:每加載一個(gè)模型就對(duì)所有測(cè)試數(shù)據(jù)進(jìn)行評(píng)估,同時(shí)在每次加載模型前,對(duì)當(dāng)前session進(jìn)行重置。keras的tf后臺(tái)提供了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 循環(huán)訓(xùn)練模型跑數(shù)據(jù)時(shí)內(nèi)存泄漏的解決方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長的方法
今天小編就為大家分享一篇python 獲取毫秒數(shù),計(jì)算調(diào)用時(shí)長的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02python報(bào)錯(cuò)TypeError: Input z must be
大家好,本篇文章主要講的是python報(bào)錯(cuò)TypeError: Input z must be 2D, not 3D的解決方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12Python裝飾器入門學(xué)習(xí)教程(九步學(xué)習(xí))
裝飾器(decorator)是一種高級(jí)Python語法。裝飾器可以對(duì)一個(gè)函數(shù)、方法或者類進(jìn)行加工。本文給大家介紹Python裝飾器入門學(xué)習(xí)教程(九步學(xué)習(xí)),對(duì)python裝飾器相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01深入理解Python內(nèi)置函數(shù)eval的使用
在Python中,eval函數(shù)是一個(gè)內(nèi)置函數(shù),用于將字符串解析并執(zhí)行為Python表達(dá)式,本文將詳細(xì)介紹eval函數(shù)的使用方法和注意事項(xiàng),需要的可以參考一下2023-06-06