浅谈tensorflow之内存暴涨问题


Posted in Python onFebruary 05, 2020

在用tensorflow实现一些模型的时候,有时候我们在运行程序的时候,会发现程序占用的内存在不断增长。最后内存溢出,程序被kill掉了。

这个问题,其实有两个可能性。一个是比较常见,同时也是很难发现的。这个问题的解决,需要我们知道tensorflow在构图的时候,是没有所谓的临时变量的,只要有operator。那么tensorflow就会在构建的图中增加这个operator所代表的节点。所以,在运行程序的过程中,内存不断增长的原因就是在模型训练迭代的过程中,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))

如果你运行上面这段代码,会发现在运行的过程中,内存占用越来越大。原因就在于sess.run(x+y)这个语句。我们知道在tensorflow中,所有的操作都是graph的节点。而在迭代的过程中,x+y这个operator(操作)是匿名的,所以它会不断地重复,在graph中创建节点,导致内存占用越来越大。

所以要对上面的代码进行修改:

z = x+y
while True:
 print(sess.run(z))

这样就不会出现问题了。

上面只是一个简单的例子,我们可以很快发现问题。但是有时候我们的模型比较复杂,很难判断是否在迭代的过程中一直在增加节点。那怎么办呢?

其实在tensorflow里面有个函数叫做:

sess.graph.finalize()

只要每一次构图完成后,调用这个函数。然后运行程序,如果你的程序在运行的过程中还一直新建节点,这个函数就会检测到,然后就会报错。这样你就知道你的程序中一定有不合理的地方。

另一个导致内存暴涨的原因是,数据的加载问题。tensorflow现在有一个API接口,tf.data.Dataset 。这个接口里面有个函数叫做cache(filename)。cache函数的作用是将加载进来的数据存放到filename指定的地方。但是如果我们没有指定filename,数据就是一直存储在内存中。所以,随着迭代次数的增加,存储在内存中的数据越来越多,就会导致内存暴涨。所以要么不要使用这个函数,要么就要记得添加filename参数。

以上这篇浅谈tensorflow之内存暴涨问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 控制语句
Nov 03 Python
python模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
对python3 urllib包与http包的使用详解
May 10 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
python生成特定分布数的实例
Dec 05 Python
Python ORM编程基础示例
Feb 02 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Python 动态变量名定义与调用方法
Feb 09 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
python实现马丁策略的实例详解
Jan 15 Python
如何用python爬取微博热搜数据并保存
Feb 20 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
基于梯度爆炸的解决方法:clip gradient
Feb 04 #Python
You might like
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Python使用OpenCV进行标定
2018/05/08 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
财务总监岗位职责
2015/02/03 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
Windows server 2016服务器基本设置
2022/08/14 Servers