Почему этой модели Keras требуется более 6 ГБ памяти?

Похоже, что для этой модели Keras требуется 6 ГБ ОЗУ с использованием серверной части Tensorflow. Моя математика "за спиной к конверту" предполагает, что для хранения весов не должно быть больше 500 МБ. В чем дело?

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 фильтров 3х3), связанный с одним нейроном, а затем этот нейрон соединяется с ~50k нейронов.

Я довольно новичок в Керасе, поэтому я думаю, что мое недоразумение довольно фундаментально, но я не могу понять это.

1 ответ

Решение

Оказывается, моя проблема включала путь к CUDA 7.5 в моем LD_CONFIG_PATH, но в том числе путь к CUDA 7.0 в PATH, Очевидно, эта неуклюжая комбинация порождает некоторое неопределенное поведение, которое в моем случае приводило к утечке памяти.

После изучения кода с valgrindЯ обнаружил, что nvcc с 7.0 по сути прыгнул в бессмысленные области библиотеки CUDA (7.5), что не является неожиданным. Это на самом деле довольно удивительно: он пропустил память, а не просто рухнул, и что у Теано была та же ошибка.

Надеюсь, что в будущем никто больше не будет страдать от этой конкретной проблемы, но если это так, дважды проверьте пути к своим версиям!

На моей локальной машине без установленного графического процессора Tensorflow я все еще получал утечку памяти, которая возникла из-за ошибки в предыдущей (0.7.0) версии, которая была исправлена ​​в выпуске (0.7.1). Опять же, я не выяснил, почему мой бэкэнд Theano без графического процессора также вызвал утечку, но после обновления Tensorflow бэкэнд Theano тоже не утек. Это очень странная вещь, но я считаю, что общее решение этой проблемы - "обновить" и "перепроверить свою среду".

Другие вопросы по тегам