首页 > 解决方案 > 如何从 keras 模型中释放 GPU 内存?

问题描述

我正在加载一个我之前训练过的 keras 模型,用他的权重初始化另一个网络。不幸的是,我加载的模型填满了我的全部记忆,使得新模型的训练变得不可能。这是代码:

import gc
import keras
from keras.models import model_from_json

def loadModel (path, loss=None, optimizer=None):
    with open(path + '/model.json', 'r') as f:
        model = model_from_json(f.read())
    model.load_weights(path + '/model.h5')
    if loss and optimizer:
        model.compile(loss=loss, optimizer=optimizer)
    return model

model = loadModel('the/path/to/my/model')

# The GPU memory is filled

keras.backend.clear_session()

# memory still filled

del model
gc.collect()

# memory still filled

我检查了多个帖子,通常gc.collect()还是clear_session()可以解决问题,但是对我来说,到目前为止还行不通。任何的想法?

PS:我使用 tensorflow 作为后端。

标签: pythontensorflowkerasdeep-learning

解决方案


正如@MatiasValdenegro 所说,tensorflow 分配了整个内存,这就是为什么我在删除模型后看不到差异的原因。所以我基本上加载了我的预训练模型,创建了我的新模型,并用预训练模型的权重初始化了他的权重。del model之后,我删除了使用和的预训练模型gc.collect()。由于新模型比预训练模型多一层,因此我必须减小批量大小以免内存不足。


推荐阅读