基于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中列表生成式和生成器的区别
Aug 03 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
Flask配置Cors跨域的实现
Jul 12 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
Python中的套接字编程是什么?
Jun 21 Python
python之django路由和视图案例教程
Jul 26 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 设计模式之 工厂模式
2008/12/19 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
Javascript 继承实现例子
2009/08/12 Javascript
js 居中漂浮广告
2010/03/21 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
Python 合并拼接字符串的方法
2020/07/28 Python
python使用建议与技巧分享(二)
2020/08/17 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
实习鉴定范文
2013/12/19 职场文书
英语演讲稿范文
2014/01/03 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
2015年化验室工作总结
2015/04/23 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python