패딩 과정을 통해 생성자가 만들어 내는 이미지의 크기를 조절해야 하는 이유는 판별자가 비교할 ‘진짜’와 똑같은 크기가 되어야 하기 때문입니다. 예를 들어 MNIST 손글씨 인식을 사용한다면, 모든 손글씨 사진이 가로가 28픽셀이고 세로가 28픽셀의 크기로 되어 있으므로 생성자에서 만들어질 이미지 역시 28×28의 크기가 되어야 합니다.
케라스의 패딩 함수는 이러한 문제를 쉽게 처리할 수 있도록 도와줍니다. padding='same'이라는 설정을 통해 입력과 출력의 크기가 다를 경우 자동으로 크기를 확장해 주고, 확장된 공간에 0을 채워 넣을 수 있습니다(그림 19-3 참조).
그림 19-3 | 패딩을 이용하면 커널을 거친 후에도 차원의 변동이 없게 만들 수 있다!
패딩 외에도 알아야 할 것들이 몇 가지 더 있습니다. DCGAN의 제안자들은 학습에 꼭 필요한 옵션들을 제시했는데, 그중 하나가 배치 정규화(Batch Normalization)라는 과정입니다. 배치 정규화란 입력 데이터의 평균이 0, 분산이 1이 되도록 재배치하는 것인데, 다음 층으로 입력될 값을 일정하게 재배치하는 역할을 합니다. 이 과정을 통해 층의 개수가 늘어나도 안정적인 학습을 진행할 수 있습니다. 케라스는 이를 쉽게 적용할 수 있게끔 BatchNormalization() 함수를 제공합니다.