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


Posted in Python onJune 11, 2020

在使用完模型之后,添加这两行代码即可清空之前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 循环训练模型跑数据时内存泄漏的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python每次处理固定个数的字符的方法总结
Jan 29 Python
python实现apahce网站日志分析示例
Apr 02 Python
python操作xml文件示例
Apr 07 Python
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
python基于property()函数定义属性
Jan 22 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
基于python实现图片转字符画代码实例
Sep 04 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
什么是python的id函数
Jun 11 #Python
Keras:Unet网络实现多类语义分割方式
Jun 11 #Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 #Python
Keras 快速解决OOM超内存的问题
Jun 11 #Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 #Python
使用keras实现孪生网络中的权值共享教程
Jun 11 #Python
查看keras各种网络结构各层的名字方式
Jun 11 #Python
You might like
php中static静态变量的使用方法详解
2010/06/04 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
php教程之phpize使用方法
2014/02/12 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
python读文件的步骤
2019/10/08 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
市场总经理岗位职责
2014/04/11 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
武当山导游词
2015/02/03 职场文书
2015政治思想表现评语
2015/03/25 职场文书
学前教育见习总结
2015/06/23 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis