keras计算机内存不足,Keras:进行超参数网格搜索时内存不足

在进行Keras的超参数网格搜索时遇到GPU内存溢出(OOM)问题。博客作者在多个嵌套循环中构建和评估模型,每个循环内部都构建一个新的Keras顺序模型。由于不断构建模型,GPU内存逐渐被占满。作者询问如何在模型评估后释放GPU内存,以便在下一轮循环中继续构建新模型。代码示例展示了模型构建过程,包括卷积层、全连接层和激活函数的选择。
摘要由CSDN通过智能技术生成

我正在运行多个嵌套循环来进行超参数网格搜索 . 每个嵌套循环遍历超级参数值列表,并且在最内层循环内部,每次使用生成器构建和评估Keras顺序模型 . (我没有做任何训练,我只是随机初始化,然后多次评估模型,然后检索平均损失) .

我的问题是,在这个过程中,Keras似乎填满了我的GPU内存,所以我最终得到了一个OOM错误 .

在评估模型后,是否有人知道如何解决这个问题并释放GPU内存?

在评估之后我根本不需要模型,我可以在内循环的下一次传递中构建一个新模型之前完全抛弃它 .

我正在使用Tensorflow后端 .

这是代码,尽管其中大部分与一般问题无关 . 该模型构建在第四个循环内,

for fsize in fsizes:

我想有关如何构建模型的细节并不重要,但无论如何都是这样的:

model_losses = []

model_names = []

for activation in activations:

for i in range(len(layer_structures)):

for width in layer_widths[i]:

for fsize in fsizes:

model_name = "test_{}_struc-{}_width-{}_fsize-{}".format(activation,i,np.array_str(np.array(width)),fsize)

model_names.append(model_name)

print("Testing new model: ", model_name)

#Structure for this network

structure = layer_structures[i]

row, col, ch = 80, 160, 3 # Input image format

model = Sequential()

model.add(Lambda(lambda x: x/127.5 - 1.,

input_shape=(row, col, ch),

output_shape=(row, col, ch)))

for j in range(len(structure)):

if structure[j] == 'conv':

model.add(Convolution2D(width[j], fsize, fsize))

model.add(BatchNormalization(axis=3, momentum=0.99))

if activation == 'relu':

model.add(Activation('relu'))

if activation == 'elu':

model.add(ELU())

model.add(MaxPooling2D())

elif structure[j] == 'dense':

if structure[j-1] == 'dense':

model.add(Dense(width[j]))

model.add(BatchNormalization(axis=1, momentum=0.99))

if activation == 'relu':

model.add(Activation('relu'))

elif activation == 'elu':

model.add(ELU())

else:

model.add(Flatten())

model.add(Dense(width[j]))

model.add(BatchNormalization(axis=1, momentum=0.99))

if activation == 'relu':

model.add(Activation('relu'))

elif activation == 'elu':

model.add(ELU())

model.add(Dense(1))

average_loss = 0

for k in range(5):

model.compile(optimizer="adam", loss="mse")

val_generator = generate_batch(X_val, y_val, resize=(160,80))

loss = model.evaluate_generator(val_generator, len(y_val))

average_loss += loss

average_loss /= 5

model_losses.append(average_loss)

print("Average loss after 5 initializations: {:.3f}".format(average_loss))

print()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值