Расчет размеров в сверточной нейронной сети - PullRequest
0 голосов
/ 30 марта 2020

Я читал этот урок по сверточным авто кодировщикам Keras и понял, что не получаю размер (8, 4, 4) после этих слоев в моем расчете - размер изображений должен упасть до 3 уже после второй сверточный слой, так как шаг большой. Так как же получить это измерение? Или кто-нибудь может объяснить процесс вычисления?

Я также запутался в том, как «одинаковые» отступы выполняются в этой ситуации, так как они всегда упоминают «когда для шага = 1 одинаковое заполнение будет сохранять одинаковое измерение». Я полностью понимаю это. Но что происходит, когда шаг не 1? сколько нулей я получу на каждой стороне? Я знаю уравнение расчета для размеров, floor ((h + 2p - k) // s + 1), но что такое p в этом случае?

Спасибо

input_img = Input(shape=(1, 28, 28))

x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)

# at this point the representation is (8, 4, 4) i.e. 128-dimensional

1 Ответ

0 голосов
/ 30 марта 2020

О нет, я думаю, я знаю, что происходит: код в руководстве неверен. Я нашел этот вопрос , в котором приводятся те же уроки с правильным кодом. Поэтому они забыли поставить круглые скобки во всех слоях Convolution2D (это переведенная версия), и на самом деле они должны быть 16 (3, 3), что означает, что шаг равен 1, а не 3. Так что это объясняется. Если шаг равен 3, мы не можем получить это измерение.

...