我正在使用Tensorflow进行GPU加速的深度学习,并且遇到内存泄漏(RAM种类,而不是GPU)。
我已经把它缩小到了训练线
,几乎毫无疑问self.sess.run(self.train_step, feed_dict={self.x: trainingdata, self.y_true: traininglabels, self.keepratio: self.training_keep_rate})
如果我评论该行,并且只有该行, out(但仍然进行所有我的预处理和验证/测试等几千个培训批次),内存泄漏不会发生。
泄漏大小是每小时几GB(我正在运行Ubuntu,并且有16GB RAM + 16GB交换;系统变得非常迟缓并且在运行1-3小时后没有响应,大约1 / 3-使用了1/2的RAM,这对我来说有点奇怪,因为我还有很多RAM,当发生这种情况时CPU大部分是免费的......)
以下是一些初始化代码(如果相关,则仅在开头运行一次):
with tf.name_scope('after_final_layer') as scope:
self.layer1 = weights["wc1"]
self.y_conv = network(self.x, weights, biases, self.keepratio)['out']
variable_summaries(self.y_conv)
# Note: Don't add a softmax reducer in the network if you are going to use this
# cross-entropy function
self.cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(self.y_conv, self.y_true, name = "softmax/cross_ent"), name = "reduce_mean")
self.train_step = tf.train.AdamOptimizer(learning_rate, name = "Adam_Optimizer").minimize(self.cross_entropy)
self.prediction = tf.argmax(self.y_conv, 1)
self.correct_prediction = tf.equal(self.prediction, tf.argmax(self.y_true, 1))
self.accuracy = tf.reduce_mean(tf.cast(self.correct_prediction, tf.float32))
if tensorboard:
# Merge all the summaries and write them out to the directory below
self.merged = tf.summary.merge_all()
self.my_writer = tf.summary.FileWriter('/home/james/PycharmProjects/AI_Final/my_tensorboard', graph=self.sess.graph)
# self.sess.run(tf.initialize_all_variables()) #old outdated way to do below
tf.global_variables_initializer().run(session=self.sess)
我也很乐意发布所有的网络/初始化代码,但我认为这可能与此漏洞无关。
我做错了什么或者我发现了Tensorflow错误?提前谢谢!
更新: 我很快就会提交一份错误报告,但我首先要确认我并没有因为自己的错误而烦恼。我添加了
self.sess.graph.finalize()
到我的初始化代码的末尾。据我所知,如果我不小心添加到图表中,它应该抛出异常。没有异常被抛出。我使用的是版本0.12.0-rc0,np版本1.12.0b1和Python版本2.7.6。这些版本可能过时/问题吗?
答案 0 :(得分:1)
这个问题在1.1中解决了。忽略this page(在撰写本文时)说最新的稳定版本是r0.12; 1.1是最新的稳定版本。请参阅https://github.com/tensorflow/tensorflow/issues/9590和https://github.com/tensorflow/tensorflow/issues/9872