解决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标准库urllib2的一些使用细节总结
Mar 16 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
Django 自定义分页器的实现代码
Nov 24 Python
python异常处理和日志处理方式
Dec 24 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
python脚本框架webpy模板控制结构
Nov 20 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新手上路(十二)
2006/10/09 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python 多线程的实例详解
2017/09/07 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
自我鉴定思想方面
2013/10/07 职场文书
学生个人自我鉴定
2014/03/26 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
个人合伙协议书范本
2014/10/14 职场文书
初中信息技术教学计划
2015/01/22 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
花田少年史观后感
2015/06/16 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python