基于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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
用Python编写一个国际象棋AI程序
Nov 28 Python
Python实现抓取城市的PM2.5浓度和排名
Mar 19 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Python玩转PDF的各种骚操作
May 06 Python
利用python求积分的实例
Jul 03 Python
python变量的存储原理详解
Jul 10 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
如何通过Django使用本地css/js文件
Jan 20 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
使用pytorch实现论文中的unet网络
Jun 24 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
bootstrap Table的一些小操作
2017/11/01 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
js传递数组参数到后台controller的方法
2018/03/29 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
Pandas之缺失数据的实现
2021/01/06 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
积极分子思想汇报
2014/01/04 职场文书
追悼会上的答谢词
2014/01/10 职场文书
学生会主席演讲稿
2014/04/25 职场文书
社区干部培训心得体会
2016/01/06 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python