Я использую keras для обучения моего Inception-Resnet для моих данных МРТ. Данные распределены по 151 файлам, и каждый файл соответствует пациенту (я не могу накапливать данные в один, поскольку имена файлов являются идентификаторами для пациента, которые предоставляют метки). Данные слишком велики, чтобы уместиться в моей памяти (больше 25 ГБ). Поэтому я использовал keras.fit_generator . Я пытаюсь прочитать файлы (равные по количеству batch_size) и выполнить некоторую обработку для них, а затем получить эти данные и повторить. Проблема здесь в том, что когда я использую генератор и наблюдаю свою ОЗУ при каждом следующем (данные), использование ОЗУ увеличивается каждый раз вместо того, чтобы оставаться одинаковым или почти одинаковым (так как размеры файлов почти одинаковы), что в некоторых 88 файлах приводит к сбою моего кода. Что мне не хватает? Я много пробовал. Вот мой код генератора:
def file_reading(datafiles, batch_size, labels, d_type, N):
while True:
batch_data = []
batch_label = []
batch_start = 0
batch_end = batch_size
label = -1
i=0
while (batch_end<=N):
for path in datafiles[batch_start:batch_end] :
id = int(path.split('/')[-1].split('.')[0].lstrip("0"))
if id in labels:
dlabel_of_id = labels[id][d_type]
else:
pass
if (dlabel_of_id != 'na'):
if (dlabel_of_id == 'yes'):
label = 1
elif (dlabel_of_id == 'no'):
label = 0
raw = mne.io.read_raw_edf(path, preload=True);
if max(raw.times) < 660:
raw.crop(tmin=60, tmax=max(raw.times));
else:
raw.crop(tmin=60, tmax=660);
temp = montages(raw)
raw = 0
temp = np.resize(temp,(2966,2966,3))
batch_data.append(temp)
batch_label.append(label)
yield (batch_data, batch_label)
batch_start += batch_size
batch_end += batch_size
Более того, когда я делаю это
data = file_reading(paths, 16, labels, 'EEG', 151)
len(next(data)[0])
Тогда память не накапливается и генератор работает нормально.