tf.decode_csv函数中的Tensorflow内存泄漏

时间:2017-11-25 02:32:33

标签: python-3.x memory tensorflow memory-leaks

所以我运行的DNN基于位于此处的iris模型:https://www.tensorflow.org/get_started/estimator以及位于此处的textlineReader建议:https://www.tensorflow.org/api_guides/python/reading_data

它存在内存泄漏问题,我已将泄漏范围缩小到这几行代码:

import numpy as np
import tensorflow as tf

def main():
    filename_queue = tf.train.string_input_producer(file_path)
    defaults = [[0.],[0.],[0.],[0.],[0]]
    reader = tf.TextLineReader()
    key, value = reader.read(filename_queue)

    for i in range(50000):
      columns = tf.decode_csv(value, record_defaults=defaults)

if __name__ == "__main__":
    main()

file_path引用的.csv文件包含1行:

  

5.9,3.0,4.2,1.5,1

当我运行程序时,这是我的系统使用超过60秒: System Usage

有趣的是,当我杀死程序或OOM管理器时,所有内存都会被释放。

无论如何,由于训练数据集的大小,我必须在我的程序中使用批处理,因此我还必须批量执行.csv文件的解码。

有没有办法规避这种泄漏,或者这是一个应该报告的错误?

欢迎任何信息或建议。

1 个答案:

答案 0 :(得分:0)

显然,泄漏来自调用decode_csv函数,该函数正在分配一些空间,该空间在程序返回之前不会被释放。解决方案是在获取批处理时在for循环之外调用tf.decode_csv函数。虽然这听起来不直观,但我已经能够验证它是否仍然连续读取数据。

更重要的是,这可以深入了解我认为在Tensorflow中称为图形操作的本质。一个分配没有在会话附近,它仍然有效。我想这更像是设置一个管道,然后通过pipelinne提供数据。

我的代码现在实际上运行得更快,没有所有的mallocs!