解决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/ironpython:从入门到精通
Oct 02 Python
Python中的Numpy入门教程
Apr 26 Python
Python subprocess库的使用详解
Oct 26 Python
详解python读取image
Apr 03 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
Django中modelform组件实例用法总结
Feb 10 Python
python实现低通滤波器代码
Feb 26 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
如何教少儿学习Python编程
Jul 10 Python
使用python批量修改XML文件中图像的depth值
Jul 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中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php实现的SESSION类
2014/12/02 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
微信小程序实现分页加载效果
2020/11/19 Javascript
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
Python的log日志功能及设置方法
2019/07/11 Python
python增加图像对比度的方法
2019/07/12 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
校园门卫岗位职责
2013/12/09 职场文书
银行类自荐信
2014/02/04 职场文书
清扬洗发水广告词
2014/03/14 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
行政处罚听证告知书
2015/07/01 职场文书
python运行脚本文件的三种方法实例
2022/06/25 Python