解决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 15 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
Python 忽略warning的输出方法
Oct 18 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python实现任意位置文件分割的实例
Dec 14 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python调用C语言程序方法解析
Jul 07 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
Python读取网页内容的方法
2015/07/30 Python
基于python log取对数详解
2018/06/08 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
PyTorch-GPU加速实例
2020/06/23 Python
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
《雨霖铃》教学反思
2014/02/22 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
房产继承公证书
2014/04/09 职场文书
答谢会策划方案
2014/05/12 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
电子商务专业求职信
2014/07/10 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
世界文化遗产导游词
2019/08/07 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android