基于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 12 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
python实现简易内存监控
Jun 21 Python
浅析Python函数式编程
Oct 06 Python
python抓取京东小米8手机配置信息
Nov 13 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
python不同系统中打开方法
Jun 23 Python
8种常用的Python工具
Aug 05 Python
python matplotlib绘制三维图的示例
Sep 24 Python
python中的测试框架
Nov 13 Python
python 实现两个变量值进行交换的n种操作
Jun 02 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
ini_set的用法介绍
2014/01/07 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
js对象基础实例分析
2015/01/13 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python项目打包成二进制的方法
2020/12/30 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
linux面试相关问题
2013/04/28 面试题
cf搞笑广告词
2014/03/14 职场文书
投资合作协议书
2014/04/17 职场文书
广播体操比赛主持词
2015/06/29 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
什么是css原子化,有什么用?
2022/04/24 HTML / CSS