Я новичок в Keras, и тензор потока в целом, и у меня есть проблема. Я использую некоторые из функций потерь (главным образом, binary_crossentropy и mean_squared_error) для расчета потерь после прогнозирования. Поскольку Keras принимает только свой собственный тип переменной, я создаю его и указываю в качестве аргумента. Этот сценарий выполняется в цикле (со сном) следующим образом:
Получить соответствующие данные -> предсказать -> рассчитать потерянные -> вернуть их.
Поскольку у меня есть несколько моделей, которые следуют этому шаблону, я создал графики и сеансы тензорного потока для предотвращения столкновений (также при экспорте весов моделей у меня были проблемы с одним графиком и сессией, поэтому мне пришлось создавать разные для каждой отдельной модели).
Тем не менее, теперь память неуправляемо растет, с пары МБ до 700 МБ за пару итераций. Мне известны функции clear_session () и gc.collect () Keras, и я использую их в конце каждой итерации, но проблема все еще присутствует. Здесь я предоставляю фрагмент кода, который не является реальным кодом, из проекта. Я создал отдельный скрипт, чтобы изолировать проблему:
import tensorflow as tf
from keras import backend as K
from keras.losses import binary_crossentropy, mean_squared_error
from time import time, sleep
import gc
from numpy.random import rand
from os import getpid
from psutil import Process
from csv import DictWriter
from keras import backend as K
this_process = Process(getpid())
graph = tf.Graph()
sess = tf.Session(graph=graph)
cnt = 0
max_c = 500
with open('/home/quark/Desktop/python-test/leak-7.csv', 'a') as file:
writer = DictWriter(file, fieldnames=['time', 'mem'])
writer.writeheader()
while cnt < max_c:
with graph.as_default(), sess.as_default():
y_true = K.variable(rand(36, 6))
y_pred = K.variable(rand(36, 6))
rec_loss = K.eval(binary_crossentropy(y_true, y_pred))
val_loss = K.eval(mean_squared_error(y_true, y_pred))
writer.writerow({
'time': int(time()),
'mem': this_process.memory_info().rss
})
K.clear_session()
gc.collect()
cnt += 1
print(max_c - cnt)
sleep(0.1)
Кроме того, я добавил график использования памяти:
утечка памяти Keras
Любая помощь приветствуется.