解决TensorFlow训练内存不断增长,进程被杀死问题


Posted in Python onFebruary 05, 2020

TensorFlow训练时,遇到内存不断增长,最终导致内存不足,进程被杀死。

在这里我不准备对造成这一现象的所有原因进行探讨,只是记录一下我在项目中遇到的这一问题,下面将对我遇到的内存不断增长的原因进行分析。

在TensorFlow中构造图,是将一些op作为节点加入图中,在run之前,是需要构造好一个图的,所以在run的时候,如果run图中不存在的节点,TensorFlow就会将节点加入图中,随着不断的迭代,造成内存不断的增长,从而导致内存不足。

下面举一个很容易发现这个问题的例子:

import tensorflow as tf
x = tf.Variable(tf.constant(1))
y = tf.constant(2)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
while True:
 print(sess.run(x+y))

在上面的例子中,x,y是图中的两个节点,在while循环中run(x)或者run(y)都是不存在问题的,但是上例中我们使用的时run(x+y),而在TensorFlow的图中是不存在x+y这个节点的,所以在run的时候,图中会不断的创建该节点,最终导致了内存不足。这个例子很容易理解,这样的问题也很容易发现。

下面,将举一个不是那么容易发现的问题:

import tensorflow as tf
test = tf.get_variable('test', shape=[4, 1], initializer=tf.random_normal_initializer(stddev=0.1))
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
 sess.run(init_op)
 print(sess.run(test[0]))

这个例子是创建一个shape为[4,1]的变量对象,test为图中的一个节点,但是在我们实际使用时,我们可能并不需要test里的所有数据,加入只需要一个数据test[0],当我们使用run(test[0])时,test[0]并不是图中的节点,该节点就会在图中创建。上面的例子并没有使用循环,所以增加了节点,但是也不会造成内存的不足,当使用了循环时,就需要注意了。

解决办法:run图中存在的节点,对返回的结果进行处理,得到想要的结果,不要在run里面对节点处理(处理后的节点可能不是图中的节点)。

以上这篇解决TensorFlow训练内存不断增长,进程被杀死问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编写简单的HTML页面合并脚本
Jul 11 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
python spyder中读取txt为图片的方法
Apr 27 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
python用700行代码实现http客户端
Jan 14 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
python和Appium的移动端多设备自动化测试框架
Apr 26 Python
浅谈tensorflow之内存暴涨问题
Feb 05 #Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 #Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 #Python
django3.02模板中的超链接配置实例代码
Feb 04 #Python
tensorflow自定义激活函数实例
Feb 04 #Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 #Python
pytorch梯度剪裁方式
Feb 04 #Python
You might like
phpMyAdmin 安装及问题总结
2009/05/28 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
vue实现拖拽效果
2019/12/23 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Python匹配中文的正则表达式
2016/05/11 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
python线性插值解析
2020/07/05 Python
python中uuid模块实例浅析
2020/12/29 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
英语专业学生个人求职信范文
2014/01/06 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
保护环境倡议书300字
2014/05/19 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
Python内置的数据类型及使用方法
2022/04/13 Python