GPU OOM: петля настройки гиперпараметра с различными моделями - PullRequest
1 голос
/ 22 апреля 2019

Я ищу в сетке гиперпараметры, используя itertools.product () и перезаписываю переменную модели каждым циклом. Однако на 2-й итерации происходит сбой из-за нехватки памяти:

import itertools
import tensorflow as tf
from tensorflow import keras
from keras.losses import sparse_categorical_crossentropy
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam

hyperparameters = {
'lr': [1e-3, 1e-4],
'model': [model1, model2]
}

hps, values = zip(*hyperparameters.items())
for v in itertools.product(*values):
  cur_hps = dict(zip(hps, v))
  model = cur_hps['model'](input_shape = (256, 256, 3))

  optim = Adam(lr = cur_hps['lr'])
  model.compile(optimizer = optim,
                loss = categorical_categorical_crossentropy,
                metrics = ['accuracy'])

  train_gen = myDataGenerator() # returns Sequence

  model.fit_generator(train_gen,
                      epochs = 5,
                      use_multiprocessing = True,
                      workers = 8)

Я пытался завершить цикл с помощью:

tf.reset_default_graph()
del model
keras.backend.clear_session()

Но безрезультатно, что усложняет проверку более 50 комбинаций. Модели имеют разные архитектуры.

1 Ответ

0 голосов
/ 22 апреля 2019

Кажется, что есть две возможные причины:

  1. Память не освобождается после тренировки предыдущей сети
  2. Данная модель просто слишком большая

Для первого случая отметьте Keras: освободить память после завершения процесса обучения

Во втором случае попробуйте уменьшить batch_size в вашем генераторе данных и посмотрите, решит ли он проблему. В качестве альтернативы, используйте несколько графических процессоров или измените архитектуру, чтобы она могла поместиться в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...