解决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使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
python九九乘法表的实例
Sep 26 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
python实现比较文件内容异同
Jun 22 Python
Django 用户认证组件使用详解
Jul 23 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python ORM编程基础示例
Feb 02 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 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 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
Django 中 cookie的使用
2017/08/17 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
Python输出各行命令详解
2018/02/01 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
后勤部长岗位职责
2013/12/14 职场文书
大学运动会通讯稿
2014/01/28 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers