基于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中的exec、eval使用实例
Sep 23 Python
python实现比较两段文本不同之处的方法
May 30 Python
python队列queue模块详解
Apr 27 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
使用python实现简单五子棋游戏
Jun 18 Python
Golang GBK转UTF-8的例子
Aug 26 Python
python numpy数组复制使用实例解析
Jan 10 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python3获取cookie常用三种方案
Oct 05 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 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和XSS跨站攻击的防范
2007/04/17 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
javascript每日必学之循环
2016/02/19 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
谈谈JS中的!!
2017/12/07 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python中如何进行连乘计算
2020/05/28 Python
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
数据库连接池的工作原理
2012/09/26 面试题
Python如何实现单例模式
2016/06/03 面试题
服装设计师求职信
2014/06/04 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
观看建国大业观后感
2015/06/01 职场文书