Как рассчитать размер сверточного фильтра в python keras? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть пример кода из Интернета. Это часть простого кода моделирования CNN + GAN в python3.6, keras.

def __init__(self):
    self.img_rows = 28
    self.img_cols = 28
    self.channels = 1

def build_discriminator(self):
    img_shape = (self.img_rows, self.img_cols, self.channels)

    model = Sequential()
    model.add(Conv2D(64,(5,5), strides=(2,2),\
    padding='same', input_shape=img_shape))
    model.add(LeakyReLU(0.2))
    model.add(Conv2D(128,(5,5),strides=(2,2)))
    model.add(LeakyReLU(0.2))
    model.add(Flatten())
    model.add(Dense(256))
    model.add(LeakyReLU(0.2))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    return model

Это на самом деле работает, но я до сих пор не понимаю, почему этот размер фильтра идет с (5,5) здесь. Поскольку размер изображения составляет 28 * 28, а шаги задаются как (2,2), а отступы должны быть равны 1 на "padding='same'". То есть размер фильтра должен быть (4,4) вместо (5,5)? Кто-нибудь может объяснить причину размера фильтра? Спасибо.

1 Ответ

0 голосов
/ 04 июля 2019

Этот пост очень хорошо объясняет, почему мы используем нечетные числа в фильтрах для слоев конвоя.

https://datascience.stackexchange.com/questions/23183/why-convolutions-always-use-odd-numbers-as-filter-size

Очень быстрое объяснение (но не полное): фильтр должен иметь центр, что невозможно при ядре с четными числами, например (4,4).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...