解决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 相关文章推荐
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
python和shell获取文本内容的方法
Jun 05 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Python多图片合并PDF的方法
Jan 03 Python
Django单元测试工具test client使用详解
Aug 02 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
Python中函数的返回值示例浅析
Aug 28 Python
Flask模板引擎Jinja2使用实例
Apr 23 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
python cv2图像质量压缩的算法示例
Jun 04 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
DOM XPATH获取img src值的query
2013/09/23 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python 模拟登录B站的示例代码
2020/12/15 Python
日本无添加化妆品:HABA
2016/08/18 全球购物
兼职学生的自我评价
2013/11/24 职场文书
甜点店创业计划书
2014/01/27 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
认识实习感想
2015/08/10 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
MySql分区类型及创建分区的方法
2022/04/13 MySQL
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技