Я просто пытался кое-что попробовать для кватернионной нейронной сети, когда понял, что даже если я закрою свой текущий сеанс в цикле for, моя программа медленно замедляется, и я получаю утечку памяти, вызванную созданием ops. Это мой код:Tensorflow: утечка памяти даже при закрытии сеанса?
for step in xrange(0,200):#num_epochs * train_size // BATCH_SIZE):
338
339 with tf.Session() as sess:
340
341 offset = (BATCH_SIZE) % train_size
342 #print "Offset : %d" % offset
343
344 batch_data = []
345 batch_labels = []
346 batch_data.append(qtrain[0][offset:(offset + BATCH_SIZE)])
347 batch_labels.append(qtrain_labels[0][offset:(offset + BATCH_SIZE)]
352 retour = sess.run(test, feed_dict={x: batch_data})
357
358 test2 = feedForwardStep(retour, W_to_output,b_output)
367 #sess.close()
Проблема, похоже, исходит от test2 = feedForward(..)
. Мне нужно объявить эти операторы после выполнения retour
один раз, потому что retour
не может быть заполнителем (мне нужно перебирать его). Без этой линии программа работает очень хорошо, быстро и без утечки памяти. Я не могу понять, почему это, кажется, как TensorFlow пытается «спасти» test2
даже если закрыть сессию ...
Спасибо! Я попробую ваше второе предложение, тест - это op, который я могу определить вне цикла for (как вы предлагаете в своей 1 точке). –
К сожалению, я получил хороший «Граф сеанса пуст». Добавляем операции к графику перед вызовом run() »с помощью tf.Graph.as_default() –
Плохо, что это работает! Большое спасибо ! –