解决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使用reportlab实现图片转换成pdf的方法
May 22 Python
Python实现的桶排序算法示例
Nov 29 Python
Python装饰器用法实例总结
Feb 07 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python自定义一个异常类的方法
Jun 27 Python
利用python实现逐步回归
Feb 24 Python
python中的垃圾回收(GC)机制
Sep 21 Python
python如何用matplotlib创建三维图表
Jan 26 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
Python中使用Lambda函数的5种用法
Apr 01 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
JavaScript类的写法
2016/09/17 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
2017/09/28 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
安全标语大全
2014/06/10 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技