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

标签 python neural-network keras

使用 Tensorflow 后端,这个 Keras 模型似乎需要 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 的 Tensorflow 的情况下,我仍然遇到内存泄漏,这似乎是之前 (0.7.0) 版本中的一个错误,已在 (0.7.1) 版本中解决。同样,我还没有弄清楚为什么我的非 GPU Theano 后端也产生了泄漏,但是在升级 Tensorflow 之后,Theano 后端也没有泄漏。这是一件很奇怪的事情,但我相信这个问题的一般解决方案是“升级”和“仔细检查你的环境”。

关于python - 为什么这个 Keras 模型需要超过 6GB 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757151/

相关文章:

python - 获取python程序的退出代码

code-generation - 使用机器学习生成代码

neural-network - 弹性传播的实现

python - tensorflow 2.0 阿尔法。问题 keras 未找到

python - Keras 如何使用 Adam 优化器恢复训练

python - Tensorflow:在函数内填充张量

c++ - Python 依赖,windows (CMake)

python - 使用正则表达式排除引号内的案例

machine-learning - 如何使用神经网络进行人脸检测?

python - 如何使用我的分类网络检测多个对象?