解决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

标签:TensorFlow,训练,内存,进程
0
投稿

猜你喜欢

  • 详解Python中dict与set的使用

    2022-09-11 05:22:22
  • 浅谈django不使用restframework自定义接口与使用的区别

    2023-11-24 09:44:02
  • windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)

    2022-03-22 02:31:42
  • Django实现auth模块下的登录注册与注销功能

    2022-03-06 17:49:15
  • python计数排序和基数排序算法实例

    2023-11-01 01:23:26
  • js+html5操作sqlite数据库的方法

    2024-01-23 18:31:05
  • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)

    2024-01-26 17:20:54
  • 详解mysql数据去重的三种方式

    2024-01-22 03:06:35
  • mysql启动报错MySQL server PID file could not be found

    2024-01-22 18:41:59
  • Python实现RGB等图片的图像插值算法

    2023-03-30 17:11:55
  • Python实现批量梯度下降法(BGD)拟合曲线

    2023-03-31 07:18:03
  • MySQL系列之六 用户与授权

    2024-01-28 05:37:31
  • “语法错误 (逗号) 在查询表达式id=20, 21”,怎么处理这个逗号?

    2009-09-18 14:52:00
  • 在python3.9下如何安装scrapy的方法

    2023-11-26 10:39:58
  • 如何使用ASP来读写注册表

    2007-09-20 13:08:00
  • 浏览器用户体验:Firefox初体验 VS The world

    2008-08-02 11:58:00
  • Vue中添加过渡效果的方法

    2024-04-10 10:33:03
  • SQL Server数据迁移至云端应用技巧谈

    2011-05-05 08:01:00
  • MySQL8.0.32安装及环境配置过程

    2024-01-19 03:20:49
  • 通用的二级菜单代码(css+javascript)

    2024-06-09 18:35:28
  • asp之家 网络编程 m.aspxhome.com