GPU-OOM:具有不同模型的超参数调谐回路

2024-09-25 04:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用网格搜索超参数itertools.产品()并用每个循环覆盖模型变量。但是,在第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个组合进行测试。这些模型有不同的体系结构。你知道吗


Tags: from模型importmodeltftensorflowkerasitertools
1条回答
网友
1楼 · 发布于 2024-09-25 04:19:43

似乎有两种可能的原因:

  1. 前一个网络训练后内存不释放
  2. 给定的模型实在太大了

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

对于第二种情况,尝试减少数据生成器中的batch_size,看看它是否解决了问题。或者,使用多个GPU或更改体系结构,使其可以放入内存。你知道吗

相关问题 更多 >