解决Tensorflow 内存泄露问题


Posted in Python onFebruary 05, 2020

使用tensorflow进行编程时,经常遇到操作不当,带来的内存泄露问题,这里有一个可以帮助debug问题所在方法:

https://stackoverflow.com/questions/51175837/tensorflow-runs-out-of-memory-while-computing-how-to-find-memory-leaks/51183870#51183870

使用tf.Graph.finalize()把运算图变成只读的,从而对图的修改都会报错,从而找到内存泄露的定点。

目前我出现过内存泄露问题的有两处:

1.

session和graph没有释放内存。按照资料的说法,使用了with关键字可以在session异常退出时也释放内存,否则要用session.close()关闭session。代码如下:

with tf.Session() as session:
  #codes

#一般使用with以后就会释放内存,否则运行如下释放
session.close()
del session

另一方面,我是在session中加载graph(训练好的模型),导致每次关闭程序再运行,graph出现重复加载的现象。错误代码示例:

with tf.Seesion() as session:
  # 在session内部加载保存好的graph
  saver = tf.train.import_meta_graph('./CNN_cracks.meta')
  saver.restore(session, "./CNN_cracks")
  # codes

此处,在一次运行session时会加载一次graph,一次运行的时候没问题,但多次运行(调试时),每次graph都会加载到内存而不被释放,因而造成内存泄露。

正确的做法如下:

# 用with新建一个graph,这样在运行完以及异常退出时就会释放内存
graph = tf.Gragh()
with graph.as_default():
  saver = tf.train.import_meta_graph('./CNN_cracks.meta')

with tf.Session(graph=graph) as session:
  saver.restore(session, "./CNN_cracks")

2.

一些tensorflow的运算似乎也会修改图,原因未明。所以在在训练里面把所有属于tensorflow的运算都写进去,运行session.run返回的只能是只读。

##错误代码

#训练
graph = tf.Graph()
with graph.as_default():
  #codes
  predict = tf.nn.softmax(model(data))

#预测,这里训练文件与预测文件是分离的
with tf.Session(graph=graph) as session:
  #codes
  predict = session.run(predict, feed_dict={data: block})
  prediction = tf.argmax(predict, -1) #这里会对图进行修改
##正确代码

#训练
graph = tf.Graph()
with graph.as_default():
  #codes
  predict = tf.argmax(tf.nn.softmax(model(data)), -1)

#预测
with tf.Session(graph=graph) as session:
  #codes
  prediction = session.run(predict, feed_dict={data: block})

以上这篇解决Tensorflow 内存泄露问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用心得之获得github代码库列表
Jun 25 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Python实现定时精度可调节的定时器
Apr 15 Python
儿童编程python入门
May 08 Python
python3中的md5加密实例
May 29 Python
3个用于数据科学的顶级Python库
Sep 29 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
python logging模块的使用
Sep 07 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 #Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 #Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 #Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 #Python
浅谈tensorflow之内存暴涨问题
Feb 05 #Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 #Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 #Python
You might like
PHP 图片文件上传实现代码
2010/12/29 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python中创建二维数组
2018/10/17 Python
Python下简易的单例模式详解
2019/04/08 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
Python基于template实现字符串替换
2020/11/27 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
关于爱情的广播稿
2014/01/16 职场文书
三年级科学教学反思
2014/01/29 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
绿色环保演讲稿
2014/05/10 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
2016新年问候语大全
2015/11/11 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android