Как указать отступы с керасом в слое Conv2D?

1

Я пытаюсь реализовать AlexNet с Keras и проверял проект сети в MATLAB, который приводится ниже

Изображение 174551

Как можно видеть, второй слой свертки имеет 256 фильтров размером 5х5, 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 каналов, нужно ли об этом прямо заявлять?

Теги:
tensorflow
machine-learning
keras
conv-neural-network
computer-vision

2 ответа

1

Конкретный отступ не указывается в 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"))

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

  • 0
    Что на самом деле означает заполнить 2 2 2 2, а затем использовать padding=same в Conv2D?
  • 0
    @SuhailGupta же даст вам больше отступов, каждый раз, когда вы проходите через слой конвона, ваш вывод уменьшается, если вы не дополняете. Если вы дополняете 2 2 2 2, ваш вклад становится больше. Затем он передается в ваш слой слежения и затем действует так же, как я описал выше.
Показать ещё 12 комментариев
1

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню