Transpose convolution의 출력 크기

Keras의 transpose convolution 2D (Conv2DTranspose) 레이어로 DCGAN을 실습해보고 있었는데 generator가 생성해야 하는 image가 나누다 보면 소수(prime number)가 되는 직사각형 크기인 178×218 였다.

많은 예제 코드들에서 transpose convolution 2D의 padding을 “same”으로 지정하기 때문에 Conv2DTranspose의 출력 크기는 stride의 배수여야 한다고 오해 했었는데, 실은 padding을 “same”으로 설정하느냐 혹은 “valid”로 설정하느냐에 따라 출력의 크기가 다음과 같이 달라진다.

# padding을 ‘same’으로 설정 했을 때
Output = Input \times stride

# padding을 ‘valid’로 설정 했을 때
Output = (Input - 1) \times stride+ filter

예를 들어 다음 layer를 선언하고 (44, 54, 3) tensor를 주면 소수 값의 (89, 109, 64) tensor가 출력된다.

# padding을 “valid”로 설정
Conv2DTRanspose(64, kernel_size=3, strides=2, padding=‘valid’)