【问题标题】:How to control memory while using Keras with tensorflow backend?如何在使用带有 tensorflow 后端的 Keras 时控制内存?
【发布时间】:2016-08-01 13:38:54
【问题描述】:

我创建了一个包装类,它初始化了一个keras.models.Sequential 模型,并且有几个方法来启动训练过程和监控进度。我在我的main 文件中实例化这个类并执行训练过程。相当平凡的东西。

我的问题是:

如何释放tensorflow分配的所有GPU内存。我尝试了以下方法,但没有成功:

import keras.backend.tensorflow_backend as K
with K.get_session() as sess:
    K.set_session(sess)
    import tensorflow as tf
    from neural_net import NeuralNet
    with tf.device('/gpu:0'):
        nn = NeuralNet('config', train_db_path, test_db_path)
        nn.train(1000, 1)
        print 'Done'
    K._SESSION.close()
    K.set_session(None)

即使会话已关闭并重置为Nonenvidia-smi 也不会反映内存使用量的任何减少。有什么想法吗?

想法

__exit__ 方法添加到我的NeuralNet 类并将其实例化为:

with NeuralNet() as nn:
    nn.train(1000, 1)

这种方法应该如何释放keras模型的资源?

测试环境

我在带有 3 个 GTX 960 GPU 的 Ubuntu 14.04 上使用 iPython Notebook。

参考:

  1. https://github.com/fchollet/keras/issues/2102
  2. https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8

【问题讨论】:

  • 想知道您是否找到了解决方案!我似乎无法找到一种方法让 tensorflow(通过 keras)释放内存而不退出 python 进程
  • 不。远离 Keras。仅使用带有图形和会话的 tensorflow。
  • 你试过 K.clear_session()

标签: python gpu tensorflow deep-learning keras


【解决方案1】:

以下方法可以让我在每次运行时重新初始化 Jupyter 笔记本中 Keras 层的状态:

from keras import backend as K
K.clear_session()
sess = tf.Session()
K.set_session(sess)

此外,每次笔记本运行时,图表都会被命名并重置:

graphr = K.get_session().graph
with graphr.as_default():
    #...graph building statements...

注意:我仍在尝试围绕 Keras 和 tensorflow 的概念(我相信它们在文档和示例中的描述不佳),但上述方法有效。

【讨论】:

  • 清除会话是否会保留所有现有模型及其权重?
  • 权重已清除,图表已保留,抱歉回复晚了。不知怎的,我没有收到通知...
  • @xor007:如果我错了,请纠正我。如果权重被清除,那么使用clear_session 有什么用?所有训练的权重都将丢失。
  • @SrinivasValekar,如果你需要保持体重,确实不应该打电话给clear_session。但是,当我尝试使用超参数时,有时我想“忘记”正在运行的 Jupyter 笔记本中的图表上学习到的权重。在这种情况下,clear_session 会这样做。
  • @xor007:感谢您的快速回复,您能否告诉我解决MemoryError 训练模型的最佳方法?我在第一个时代后收到 MemoryError 。这就是我正在做的事情 - 在第一个 epoch 之后,我保存模型,然后使用 clear_session 并加载模型并重新训练它。这是正确的方法吗?
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 2019-04-10
  • 2016-12-19
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多