解决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 相关文章推荐
只需7行Python代码玩转微信自动聊天
Jan 27 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python实现接口并发测试脚本
Jun 25 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
python range实例用法分享
Feb 06 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
浅谈Python numpy创建空数组的问题
May 25 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/05/21 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
php微信开发自定义菜单
2016/08/27 PHP
显示、隐藏密码
2006/07/01 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
layui分页效果实现代码
2017/05/19 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
Python httplib模块使用实例
2015/04/11 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
Python编写一个闹钟功能
2017/07/11 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
django序列化serializers过程解析
2019/12/14 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
趣味比赛活动方案
2014/02/15 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
2015年后备干部工作总结
2015/05/15 职场文书