解决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实现的密码强度检测器示例
Aug 23 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
opencv python 2D直方图的示例代码
Jul 20 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
详解python中的hashlib模块的使用
Apr 22 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Python urllib.request对象案例解析
May 11 Python
python如何处理程序无法打开
Jun 16 Python
解决keras backend 越跑越慢问题
Jun 18 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
django 通过URL访问上传的文件方法
2019/07/28 Python
python获取整个网页源码的方法
2020/08/03 Python
python super()函数的基本使用
2020/09/10 Python
Django admin组件的使用
2020/10/24 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
EJB的基本架构
2016/09/22 面试题
党课知识竞赛主持词
2014/04/01 职场文书
爱国主义影片观后感
2015/06/18 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python