基于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实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
Python中的tuple元组详细介绍
Feb 02 Python
python中range()与xrange()用法分析
Sep 21 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
Python装饰器知识点补充
May 28 Python
Django model序列化为json的方法示例
Oct 16 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python基于字典实现switch case函数调用
Jul 22 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
分享7个 Python 实战项目练习
Mar 03 Python
python函数的两种嵌套方法使用
Apr 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
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
php正则表达式(regar expression)
2011/09/10 PHP
php上传文件问题汇总
2015/01/30 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
Atom的python插件和常用插件说明
2018/07/08 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python3中rank函数的用法
2019/11/27 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
创联软件面试题笔试题
2012/10/07 面试题
培训研修方案
2014/06/06 职场文书
车辆工程专业求职信
2014/06/14 职场文书
大学生安全责任书
2014/07/25 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
放假通知怎么写
2015/08/18 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
golang正则之命名分组方式
2021/04/25 Golang