10

这个 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 很陌生,所以我想我的误解是非常根本的,但我似乎无法弄清楚。

4

1 回答 1

13

事实证明,我的问题是在我LD_CONFIG_PATHPATH. 显然,这种尴尬的组合会产生一些未定义的行为,在我的情况下会产生内存泄漏。

用 . 检查代码后valgrind,我发现nvcc从 7.0 开始基本上跳到了 CUDA (7.5) 库的无意义区域,这并不意外。它实际上是非常惊人的,它泄漏了内存而不是崩溃,而且 Theano 也有同样的错误。

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

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

于 2016-03-04T15:02:51.313 回答