解决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实现获取某天是某个月中的第几周
Feb 11 Python
使用Python实现一个简单的项目监控
Mar 31 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python递归法实现简易连连看小游戏
Mar 25 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
python爬虫可以爬什么
2020/06/16 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
Laravel中Kafka的使用详解
2021/03/24 PHP
打架检讨书100字
2014/01/08 职场文书
项目投资意向书
2014/04/01 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
教师年度考核个人总结
2015/02/12 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
校运会加油稿大全
2015/07/22 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
关于Vue中的options选项
2022/03/22 Vue.js