网络编程
位置:首页>> 网络编程>> Python编程>> 基于Keras 循环训练模型跑数据时内存泄漏的解决方式

基于Keras 循环训练模型跑数据时内存泄漏的解决方式

作者:jemmie_w  发布时间:2022-06-28 10:24:00 

标签: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

来源:https://blog.csdn.net/qq_32535377/article/details/79190913

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com