解决TensorFlow训练内存不断增长,进程被杀死问题
作者:诗人的情人 时间:2021-02-09 17:14:34
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里面对节点处理(处理后的节点可能不是图中的节点)。
来源:https://blog.csdn.net/xiaobiyin9140/article/details/93303283
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python 绘图和可视化详细介绍
pandas修改DataFrame列名的方法
简单介绍Python的Django框架的dj-scaffold项目
Python二维码生成识别实例详解
使用Cython中prange函数实现for循环的并行
![](https://img.aspxhome.com/file/2023/3/76773_0s.png)
Flask框架模板渲染操作简单示例
图片放大镜,多图片放大(已更新)[可调整倍数、区域大小、展示区域位置]
Python利用watchdog模块监控文件变化
![](https://img.aspxhome.com/file/2023/5/114615_0s.png)
python离散建模之感知器学习算法
Python构建简单线性回归模型
![](https://img.aspxhome.com/file/2023/8/79738_0s.png)
pycharm 配置svn的图文教程(手把手教你)
![](https://img.aspxhome.com/file/2023/7/83697_0s.jpg)
python 调试器pdb的简单使用
![](https://img.aspxhome.com/file/2023/3/61753_0s.png)
三层级联动的日期选择下拉框javascript源码
XML+ JS创建树形菜单
在Python程序和Flask框架中使用SQLAlchemy的教程
Python中使用kitti数据集实现自动驾驶(绘制出所有物体的行驶轨迹)
![](https://img.aspxhome.com/file/2023/8/89298_0s.png)
matplotlib grid()设置网格线外观的实现
![](https://img.aspxhome.com/file/2023/2/90632_0s.png)
python中Scrapy shell的使用
![](https://img.aspxhome.com/file/2023/1/94111_0s.png)
以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式
![](https://img.aspxhome.com/file/2023/2/55492_0s.png)