解决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 fabric实现远程操作和部署示例
Mar 25 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
python实现提取百度搜索结果的方法
May 19 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
django使用xadmin的全局配置详解
Nov 15 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
Python 中如何写注释
Aug 28 Python
python 如何实现遗传算法
Sep 22 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python绘制散点图之可视化神器pyecharts
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
PHP简洁函数小结
2011/08/12 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
原生JS实现自定义滚动条效果
2020/10/27 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python相似模块用例
2016/03/04 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
股权收购意向书
2014/04/01 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
简爱读书笔记
2015/06/26 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
Python装饰器的练习题
2021/11/23 Python