python - 如何从 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 作为后端。
解决方案
正如@MatiasValdenegro 所说,tensorflow 分配了整个内存,这就是为什么我在删除模型后看不到差异的原因。所以我基本上加载了我的预训练模型,创建了我的新模型,并用预训练模型的权重初始化了他的权重。del model
之后,我删除了使用和的预训练模型gc.collect()
。由于新模型比预训练模型多一层,因此我必须减小批量大小以免内存不足。
推荐阅读
- laravel - OctoberCMS - 带有元数据生成的单页网站
- 2sxc - 2SXC:状态:400 错误请求 - 更新现有记录集或将新记录集添加到现有列表组时
- python-3.x - 从 keras.model 导入 load_model 时出错
- java - Java/Mockito - 线程在重试之前以指数方式休眠的单元测试
- python - 使用 np.fromfile() 从二进制文件中浮点数组数据
- grails - 如何使用带有重定向的“复杂”常规 OAUTH 应用程序设置项目
- ffmpeg - 通过 ffmpeg 命令合并多部电影的音频
- css - 仅移动设备上的 CSS 定位问题
- javascript - 如何使用 jQuery 显示/隐藏隐藏的 - 默认情况下 - 表行?
- mysql - Bash 脚本创建数据库