我正在用网格搜索超参数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个组合进行测试。这些模型有不同的体系结构。你知道吗
似乎有两种可能的原因:
对于第一种情况,请选中Keras: release memory after finish training process
对于第二种情况,尝试减少数据生成器中的
batch_size
,看看它是否解决了问题。或者,使用多个GPU或更改体系结构,使其可以放入内存。你知道吗相关问题 更多 >
编程相关推荐