解决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写的ARP攻击代码实例
Jun 04 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python监控文件并且发送告警邮件
Jun 21 Python
Python线程下使用锁的技巧分享
Sep 13 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
使用python制作一个解压缩软件
Nov 13 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
Mar 09 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Python如何在bool函数中取值
Sep 21 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
Protoss兵种介绍
2020/03/14 星际争霸
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
python将视频转换为全字符视频
2019/04/26 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
感谢信范文大全
2015/01/23 职场文书
python实现自动化群控的步骤
2021/04/11 Python
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python