为什么这个 Keras 模型需要超过 6GB 的内存



这个Keras模型似乎需要使用Tensorflow后端的6GB +RAM。我的粗略数学表明,存储权重不应超过 500MB。这是怎么回事?

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
IMAGE_SIZE = 128
print('Build model...')
model = Sequential()
# three color channels, 128x128
# 16 con filters, 3 rows, 3 columns
model.add(Convolution2D(16, 3, 3, input_shape=(3, IMAGE_SIZE, IMAGE_SIZE)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1))
model.add(Dense(3 * IMAGE_SIZE * IMAGE_SIZE))

model.compile(loss='mse', optimizer='sgd')
它是一个连接到单个神经元

的卷积层(16个3x3滤波器),然后单个神经元连接到~50k神经元。

我对 Keras 很陌生,所以我想我的误解是非常根本的,但我似乎无法弄清楚。

事实证明,我的问题在我的LD_CONFIG_PATH中包括一条通往 CUDA 7.5 的路径,但在 PATH 中包括一条通往 CUDA 7.0 的路径。显然,这种尴尬的组合会产生一些未定义的行为,在我的情况下会产生内存泄漏。

在用valgrind检查代码后,我发现 7.0 的nvcc本质上是跳入 CUDA(7.5)库的无意义区域,这并不意外。实际上,它泄漏了内存而不仅仅是崩溃,这真是太神奇了,而且Theano也有同样的错误。

希望将来没有其他人会受到此特定问题的困扰,但是如果是,请仔细检查您的版本路径!

在我的本地机器上,没有安装 GPU'd Tensorflow,我仍然遇到内存泄漏,这似乎是以前的 (0.7.0) 版本中的一个错误,该错误已在 (0.7.1) 版本中解决。同样,我还没有弄清楚为什么我的非GPU Theano后端也产生了泄漏,但是在升级Tensorflow之后,Theano后端也没有泄漏。这是一件非常奇怪的事情,但我相信这个问题的一般解决方案是"升级"和"仔细检查你的环境"。

相关内容

  • 没有找到相关文章

最新更新