解决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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
在centos7中分布式部署pyspider
May 03 Python
Python zip()函数用法实例分析
Mar 17 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
Python实现全排列的打印
Aug 18 Python
Django中的静态文件管理过程解析
Aug 01 Python
Python 中判断列表是否为空的方法
Nov 24 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
python利用paramiko实现交换机巡检的示例
Sep 22 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实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
php计算税后工资的方法
2015/07/28 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python处理json数据中的中文
2014/03/06 Python
Python松散正则表达式用法分析
2016/04/29 Python
python非递归全排列实现方法
2017/04/10 Python
Python正则表达式常用函数总结
2017/06/24 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Django 路由控制的实现
2019/07/17 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
幼儿园消防安全制度
2014/01/26 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
单位租房协议范本
2014/12/03 职场文书
六一亲子活动感想
2015/08/07 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
详解python的异常捕获
2022/03/03 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技