基于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中的正则表达式
Apr 28 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python删除列表内容
Aug 04 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
选择python进行数据分析的理由和优势
Jun 25 Python
使用python画社交网络图实例代码
Jul 10 Python
elasticsearch python 查询的两种方法
Aug 04 Python
pytest中文文档之编写断言
Sep 12 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Python包和模块的分发详细介绍
Jun 19 Python
浅谈pytorch中的dropout的概率p
May 27 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写出自己的BLOG系统 2
2010/04/12 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
php7下的filesize函数
2019/09/30 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
JavaScript操作Cookie详解
2015/02/28 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
python中__call__内置函数用法实例
2015/06/04 Python
手把手教你python实现SVM算法
2017/12/27 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python datetime模块的使用示例
2021/02/02 Python
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
大专生自荐信
2013/10/04 职场文书
保安部任务及岗位职责
2014/02/25 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
岁月神偷观后感
2015/06/11 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers