基于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中使用SAX解析xml实例
Nov 21 Python
python类中super()和__init__()的区别
Oct 18 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
使用python脚本实现查询火车票工具
Jul 19 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 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
如何做到多笔资料的同步
2006/10/09 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
cakephp常见知识点汇总
2017/02/24 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
javascript操作数组详解
2014/12/17 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
Python常用断言函数实例汇总
2020/11/30 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
平面设计师岗位职责
2014/09/18 职场文书
毕业赠语大全
2015/06/23 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书