Python 了解经过训练的神经网络内存使用情况 出身背景
我有一个单层的256隐藏单位,RNN,我用Keras训练过,现在我想部署它。理想情况下,我希望将此RNN的多个实例部署到GPU上。但是,此时,当我使用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所消耗的内存量 当前理解 我当前估计的网络应使用的内存量
keras.models.load_model()
加载模型时,它似乎使用了11Gb的可用12Gb GPU内存
问题
- 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))