解决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 04 Python
Java分治归并排序算法实例详解
Dec 12 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
python实现连连看辅助(图像识别)
Mar 25 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python高级特性 切片 迭代解析
Aug 23 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
PyTorch中的拷贝与就地操作详解
Dec 09 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
Python访问Redis的详细操作
Jun 26 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
python通过文件头判断文件类型
2015/10/30 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
python 获取url中的参数列表实例
2018/12/18 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
学习心得体会
2014/01/01 职场文书
班子四风对照检查材料
2014/08/21 职场文书
导游词之介休绵山
2019/12/31 职场文书