基于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 Tkinter GUI编程入门介绍
Mar 10 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python常见异常分类与处理方法
Jun 04 Python
pycham查看程序执行的时间方法
Nov 29 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
Golang Web 框架Iris安装部署
Aug 14 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 header()函数语法及使用代码
2013/11/04 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
详解Python装饰器由浅入深
2016/12/09 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
美术指导求职信
2014/03/17 职场文书
目标管理责任书
2014/04/15 职场文书
小学班主任评语
2014/12/29 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Python学习之迭代器详解
2022/04/01 Python