GPU OOM:具有不同模型的超参数调整循环

时间:2019-04-22 11:36:35

标签: python tensorflow keras

我正在使用itertools.product()在网格中搜索超参数,并在每个循环中覆盖模型变量。但是,在第二次迭代中,它由于内存不足而崩溃:

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 :(得分:0)

似乎有两种可能的原因:

  1. 训练以前的网络后内存未释放
  2. 给定的模型太大了

对于第一种情况,请选中Keras: release memory after finish training process

对于第二种情况,请尝试减少数据生成器中的batch_size,然后查看它是否可以解决问题。或者,使用多个GPU或更改体系结构,使其适合内存。