kernel_size = (3, 3)이고 zero_padding을 적용시킨conv_image_size = (114, 114)에 stride = 2를 적용시키면 무조건 kernel이 zero_paddig을 나가게 되어 버린다.
pooling으로 동작을 할때, zero_padding부분부터 시작하지 않고 이미지의 상단 좌측부터 동작을 한다. (위의 그림을 참고하면 무슨 말인지 쉽게 이해가 가능하다.)
이를 코드로 구현하면 (tensorflow에 쉬운 예제가 있어 잠깐 보고 가자.)
import tensorflow as tf
x = tf.constant([[1., 2., 3., 4.],
[5., 6., 7., 8.],
[9., 10., 11., 12.],
[13., 14., 15., 16.]])
x = tf.reshape(x, [1, 4, 4, 1])
max_pool_2d = tf.keras.layers.MaxPooling2D(pool_size=(3, 3),
strides=(2, 2), padding='valid')
max_pool_2d(x)
ouput = <tf.Tensor: shape=(1, 2, 2, 1), dtype=float32, numpy=array([[[[11.],[12.]],[[15.],[16.]]]], dtype=float32)로 나오는 것을 알 수 있다. 실제로 코드를 작성하여 구현해보면 더욱 더 쉽게 이해할 수 있다.
Max_pooling은 down sampling의 일종이다.