基于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 31 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
python list转矩阵的实例讲解
Aug 04 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 Python
python通过新建环境安装tfx的问题
May 20 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php array_search() 函数使用
2010/04/13 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
js实现带搜索功能的下拉框
2020/01/11 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
计算机个人求职信范例
2014/01/24 职场文书
大班开学家长寄语
2014/04/04 职场文书
本科生就业推荐信
2014/05/19 职场文书
会计演讲稿范文
2014/05/23 职场文书
小学班主任事迹材料
2014/12/17 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
行政上诉状范文
2015/05/23 职场文书