Как указать отступы с керасом в слое Conv2D? - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь внедрить AlexNet с Keras и проверял проектирование сети в MATLAB, которое выдается следующим образом

enter image description here

Как можно видеть, второй слой свертки имеет 256 фильтров размером 5x5, 48 каналов и отступ [2 2 2 2].Как можно указать padding из [2 2 2 2] с помощью Keras?Я просмотрел документацию Conv2D .Он принимает только 2 значения для заполнения, а именно valid и same.Я не мог этого понять.Насколько я знаю, valid будет означать заполнение нулями.Как я могу указать заполнение [2 2 2 2] вторым слоем свертки?Я создал первый слой как:

model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), 
 strides = (4,4), padding = "valid", input_shape=(227,227,3)))

Кроме того, поскольку во втором слое имеется 48 каналов, нужно ли указывать это явно?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2019

Конкретный отступ не указывается в Conv2D, а вместо этого в слое ZeroPadding2D.

valid и same на самом деле являются просто сокращениями для общих заполнений - valid означает, что вы не дополняете ввод, а same означает, что вы добавляете заполнение таким образом, что длина вывода равна длине ввода .

В вашем случае, если вы хотите добавить конкретный отступ размера 2:

model.add(keras.layers.ZeroPadding2D(padding=(2, 2)))
model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "valid"))

Я бы также настоятельно рекомендовал проверить эту keras реализацию alexnet . Обратите внимание, что вы также можете найти документы для заполнения слоев в сверточных документах keras (они полностью внизу).

2 голосов
/ 15 апреля 2019

Вы правильно набрали valid, обратите внимание, что ширина и высота будут меньше после слоя с этим параметром.

Заполнение same, с другой стороны, означает, что будет использоваться определенный размер заполнения, чтобы гарантировать, что размеры изображения не будут изменяться.

Для вашего конкретного случая, если вы добавите входное изображение с 2 пикселями на каждой стороне, вы получите точно такой же размер изображения, что и на выходе из слоя. Таким образом, указание same будет выполнять то же заполнение, что и [2 2 2 2].

Если вам нужна формула для расчета выходного размера после сверточного слоя отметьте первый ответ на этот вопрос Quora .

Я редко (если вообще) видел разные схемы заполнения, поэтому их обычно достаточно.

КСТАТИ. Все слои в AlexNet используют заполнение same, кроме первого (как правильно указано в комментариях к другому ответу).

...