【问题标题】:How to free GPU memory from keras model?如何从 keras 模型中释放 GPU 内存?
【发布时间】:2018-07-23 10:17:31
【问题描述】:

我正在加载一个我之前训练过的 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 作为后端。

【问题讨论】:

  • 默认情况下,TensorFlow会分配GPU中的所有内存并在内部进行管理,你确定不是这个?
  • @MatiasValdenegro 完全是这样,我发布了一个答案并引用了你,谢谢。

标签: python tensorflow keras deep-learning


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 2021-07-30
    • 2017-04-23
    • 2022-01-27
    • 2018-09-07
    • 2021-04-24
    • 2019-06-06
    • 2015-06-19
    • 2020-11-18
    相关资源
    最近更新 更多