解决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中的装饰器用法详解
Jan 14 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
python实现多层感知器
Jan 18 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
python的slice notation的特殊用法详解
Dec 27 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
详解php中的implements 使用
2017/06/13 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
Javascript window对象详解
2014/11/12 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
react路由配置方式详解
2017/08/07 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python实现名片管理系统
2020/02/14 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
《赵州桥》教学反思
2014/02/17 职场文书
新品发布会策划方案
2014/06/08 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
六年级情感作文之500字
2019/10/23 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python