解决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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
以windows service方式运行Python程序的方法
Jun 03 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
python list排序的两种方法及实例讲解
Mar 20 Python
浅谈Python爬虫基本套路
Mar 25 Python
numpy中的ndarray方法和属性详解
May 27 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
python Paramiko使用示例
Sep 21 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 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 session机制
2011/07/17 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python如何省略括号方法详解
2020/03/21 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
运动会演讲稿
2014/05/07 职场文书
党支部三会一课计划
2014/09/24 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python