解决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实现多线程的两种方式
May 22 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
tensorflow实现softma识别MNIST
Mar 12 Python
Python 修改列表中的元素方法
Jun 26 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
python3实现多线程聊天室
Dec 12 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
python 实现list或string按指定分段
Dec 25 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 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/06/30 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
python基于ID3思想的决策树
2018/01/03 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
如何查找网页漏洞
2016/06/22 面试题
值传递还是引用传递
2015/02/08 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
销售业务实习自我鉴定
2013/09/23 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
企业办公室岗位职责
2014/03/12 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2014年销售工作总结
2014/12/01 职场文书
家长评语怎么写
2014/12/30 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技