解决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实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
人机交互程序 python实现人机对话
Nov 14 Python
Python3学习urllib的使用方法示例
Nov 29 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python之信息加密题目详解
Jun 26 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
Django MEDIA的配置及用法详解
Jul 25 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
Jan 29 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
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
vue跨域解决方法
2017/10/15 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
Android interview questions
2016/12/25 面试题
Ruby如何实现动态方法调用
2012/11/18 面试题
优秀安全员事迹材料
2014/05/11 职场文书
养牛场项目建议书
2014/05/13 职场文书
介绍信模板
2015/01/31 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android