Python 3.x tf.decode_csv函数中的Tensorflow内存泄漏
因此,我运行的DNN基于此处的iris模型:和此处的textlineReader建议: 它存在内存泄漏问题,我已将泄漏范围缩小到以下几行代码:Python 3.x tf.decode_csv函数中的Tensorflow内存泄漏,python-3.x,memory,tensorflow,memory-leaks,Python 3.x,Memory,Tensorflow,Memory Leaks,因此,我运行的DNN基于此处的iris模型:和此处的textlineReader建议: 它存在内存泄漏问题,我已将泄漏范围缩小到以下几行代码: 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.Te
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()
其中,文件路径引用的.csv文件包含一行:
5.9,3.0,4.2,1.5,1
当我运行程序时,这是我在60秒内的系统使用情况:
有趣的是,当我终止程序或OOM管理器终止程序时,所有内存都会被释放
无论如何,由于训练数据集的大小,我必须在我的程序中使用批处理,因此我也必须批量执行.csv文件的解码
有没有办法避免这个漏洞,或者这是一个应该报告的错误
欢迎提供任何信息或建议。很明显,泄漏源于调用decode_csv函数,该函数分配了一些空间,在程序返回之前不会释放这些空间。解决方案是在获取批时在for循环之外调用tf.decode_csv函数。虽然这听起来不直观,但我已经能够验证它是否仍然通过连续读取来洗牌数据 更重要的是,这让我深入了解了Tensorflow中所谓的图操作的本质。在会话附近没有一个分配,它仍然有效。我想这更像是建立一条管道,然后通过管道传送数据
我的代码在没有那些malloc的情况下也运行得更快 很明显,泄漏源于调用decode_csv函数,该函数分配一些空间,在程序返回之前不会释放这些空间。解决方案是在获取批时在for循环之外调用tf.decode_csv函数。虽然这听起来不直观,但我已经能够验证它是否仍然通过连续读取来洗牌数据 更重要的是,这让我深入了解了Tensorflow中所谓的图操作的本质。在会话附近没有一个分配,它仍然有效。我想这更像是建立一条管道,然后通过管道传送数据 我的代码在没有那些malloc的情况下也运行得更快