基于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中删除文件的程序代码
Mar 13 Python
Python version 2.7 required, which was not found in the registry
Aug 26 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
Python中操作符重载用法分析
Apr 29 Python
Python如何实现守护进程的方法示例
Feb 08 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
python批量赋值操作实例
Oct 22 Python
Python类中方法getitem和getattr详解
Aug 30 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
python hmac模块验证客户端的合法性
Nov 07 Python
Python利用capstone实现反汇编
Apr 06 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代码
2006/12/06 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php实现上传图片文件代码
2015/07/19 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
php接口隔离原则实例分析
2019/11/11 PHP
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
javascript简易画板开发
2020/04/12 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
python获取多线程及子线程的返回值
2017/11/15 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Python 忽略文件名编码的方法
2020/08/01 Python
关于Python错误重试方法总结
2021/01/03 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
农村婚礼主持词
2014/03/13 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
三峡导游词
2015/01/31 职场文书
遗失说明具结保证书
2015/02/26 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
护理心得体会范文
2016/01/22 职场文书