基于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中的readline()方法的使用
May 24 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python学生信息管理系统(完整版)
Apr 05 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
Python实现查找数据库最接近的数据
Jun 08 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
golang中的空接口使用详解
Mar 30 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 Token(令牌)设计
2008/03/15 PHP
PHP 输出缓存详解
2009/06/20 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
python的Template使用指南
2014/09/11 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
大学生个人求职口试自我评价
2014/02/16 职场文书
新学期开学演讲稿
2014/05/24 职场文书
成都人事代理协议书
2014/10/25 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
Python中rapidjson参数校验实现
2021/07/25 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python