解决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转换字符串为摩尔斯电码的方法
Jul 06 Python
使用Python神器对付12306变态验证码
Jan 05 Python
python实现上传下载文件功能
Nov 19 Python
深入理解Python3 内置函数大全
Nov 23 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
Django数据库操作之save与update的使用
Apr 01 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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
Apache设置虚拟WEB
2006/10/09 PHP
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python实现rest请求api示例
2014/04/22 Python
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
广告创意求职信
2014/03/17 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
房屋租房协议书范本
2014/12/04 职场文书
毕业论文致谢范文
2015/05/14 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python