基于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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python 含参构造函数实例详解
May 25 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
python实现发送form-data数据的方法详解
Sep 27 Python
python requests模拟登陆github的实现方法
Dec 26 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Python matplotlib实时画图案例
Apr 23 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
使用python实现学生信息管理系统
Feb 25 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
Python算法应用实战之队列详解
2017/02/04 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python多图片合并PDF的方法
2019/01/03 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
python 串行执行和并行执行实例
2020/04/30 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
函授自我鉴定
2013/11/06 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
房产销售经理职责
2013/12/20 职场文书
项目投资意向书范本
2015/05/09 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
2015中学学校工作总结
2015/07/20 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书