解决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中请使用isinstance()判断变量类型
Aug 25 Python
Python 序列的方法总结
Oct 18 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python中scikit-learn机器代码实例
Aug 05 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
python3射线法判断点是否在多边形内
Jun 28 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
Python3自定义json逐层解析器代码
May 11 Python
python使用建议与技巧分享(一)
Aug 17 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
JS实现php的伪分页
2008/05/25 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
vue axios用法教程详解
2017/07/23 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
身边的榜样活动方案
2014/08/20 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS