Просто пытаюсь использовать Keras, но меня немного смущает функция Conv2D при использовании padding = same. Интересно, может ли кто-нибудь помочь мне выяснить, как устанавливается значение p (padding), когда padding = "same"?
Вот пример кода:
# X.shape = (3, 2, 2, 2) at this point
X = Conv2D(filters=4, kernel_size=(2, 2), strides = (1, 1), padding = 'same',
name = 'apply_conv_2',
kernel_initializer = glorot_uniform())(X)
X = BatchNormalization(axis = 3, name = 'apply_bn_2')(X)
X = Activation('relu')(X)
# X.shape = (3, 2, 2, 4) at this point
Вы должны прочитать размеры как (nr_samples, height, width, nr_channels)
Если padding = "same", высота и ширина останутся прежними. Но я немного запутался, какое значение p принимает здесь при расчете размеров.
Например, высота измерения должна быть рассчитана как:
height_next = ROUND_DOWN (((height_prev + 2xpadding - kernel_size) / stepde) + 1)
height_next = height_prev = 2.
И, как видно выше, kernel_size = 2 выше. И шаг = 1.
Итак ..
2 = ROUND_DOWN (((2 + 2xpadding - 2) / 1) + 1)
Если заполнение равно 2, то результатом становится 5, что не равно 2.
Если заполнение равно 1, то результат равен 3, который не равен 2.
Если отступ равен 0, то результат равен 1, что не равно 2.
Я предполагаю, что отступы должны быть целочисленными.
Как Keras вычисляет здесь значение заполнения?