Python 了解经过训练的神经网络内存使用情况 出身背景

Python 了解经过训练的神经网络内存使用情况 出身背景,python,memory,tensorflow,gpu,keras,Python,Memory,Tensorflow,Gpu,Keras,我有一个单层的256隐藏单位,RNN,我用Keras训练过,现在我想部署它。理想情况下,我希望将此RNN的多个实例部署到GPU上。但是,此时,当我使用keras.models.load_model()加载模型时,它似乎使用了11Gb的可用12Gb GPU内存 问题 为什么我的网络很小,占用了这么多内存?我只想预测,不想训练。我是否以错误的方式加载模型 有什么方法可以让我大致理解RNN结构与GPU内存的映射关系吗 基于这种理解,如何减少RNN所消耗的内存量 当前理解 我当前估计的网络应使用的内存量

我有一个单层的256隐藏单位,RNN,我用Keras训练过,现在我想部署它。理想情况下,我希望将此RNN的多个实例部署到GPU上。但是,此时,当我使用
keras.models.load_model()
加载模型时,它似乎使用了11Gb的可用12Gb GPU内存

问题
  • 为什么我的网络很小,占用了这么多内存?我只想预测,不想训练。我是否以错误的方式加载模型
  • 有什么方法可以让我大致理解RNN结构与GPU内存的映射关系吗
  • 基于这种理解,如何减少RNN所消耗的内存量
  • 当前理解 我当前估计的网络应使用的内存量是根据hyper参数的数量得出的:

    • 256个输入权重
    • 256个输出权重
    • 256x256经常性重量
    • 256个隐藏单元
    • 256隐藏单位偏差
    总计:
    32位/参数x(4 x 256+256 x 256)参数=260e6位


    这比我现在看到的要少得多。所以我的假设是Keras认为我仍在训练我的模型,因此试图缓存批量错误大小。但是我应该如何加载我的模型呢?

    不,这只是一种gpu内存使用策略。Keras通常基于tensorflow,tensorflow默认映射所有可用的gpu内存,以避免动态内存分配,而不管实际使用多少内存

    您可以按如下方式进行配置:

    import tensorflow as tf
    from keras.backend.tensorflow_backend import set_session
    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 0.3  # or any valid options.
    set_session(tf.Session(config=config))