我正在为分类任务构建一个简单的前馈网络。我在 AWS g2.2xlarge 实例上的 theano 之上使用 keras。我的网络配置如下:
batch_size = 32
nb_epoch = 50
dimof_input = 8100
dimof_middle = 16384
dimof_end = 16384
dropout = 0.2
dimof_output = 3
print('Build model...')
model = Sequential()
model.add(Dense(dimof_middle, input_shape=(dimof_input,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(dimof_end))
model.add(Activation('relu'))
model.add(Dropout(0.2))
#model.add(Dense(dimof_output))
#model.add(Activation('sigmoid'))
#model.add(Dense(dimof_output, activation='softmax'))
model.add(Dense(dimof_output))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
当我编译模型时,我得到内存错误
MemoryError: ('Error allocating 1073741824 bytes of device memory (CNMEM_STATUS_OUT_OF_MEMORY).', "you might consider using 'theano.shared(..., borrow=True)'")
从 AWS 来看,这是一个 4GB 视频内存、16 GB 内存的内存机器。如果我将"dimof_middle"的值减半到 8196。 一切正常。
1073741824 字节 ~ 1 GB,完全在 GPU 内存中
我做错了什么?任何帮助将不胜感激!
错误消息与分配的内存总量无关。这是关于失败时它试图分配的金额。Theano 在计算过程中分配和解分配内存。
您可以禁用CNMeM并使用nvidia-smi来找出实际分配。
http://deeplearning.net/software/theano/library/config.html#envvar-THEANORC