실행 결과
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 28, 28, 16) 160 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 14, 14, 16) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 14, 14, 8) 1160 _________________________________________________________________ max_pooling2d_1 (MaxPooling2D) (None, 7, 7, 8) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 4, 4, 8) 584 _________________________________________________________________ conv2d_3 (Conv2D) (None, 4, 4, 8) 584 _________________________________________________________________ up_sampling2d (UpSampling2D) (None, 8, 8, 8) 0 _________________________________________________________________ conv2d_4 (Conv2D) (None, 8, 8, 8) 584 _________________________________________________________________ up_sampling2d_1 (UpSampling2D) (None, 16, 16, 8) 14 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 14, 14, 16) 15 1168 _________________________________________________________________ up_sampling2d_2 (UpSampling2D) (None, 28, 28, 16) 0 _________________________________________________________________ conv2d_6 (Conv2D) (None, 28, 28, 1) 145 =================================================================
전체 구조에서 에서 로 넘어갈 때 다른 Conv2D 층과 달리 벡터 값이 줄어들었음에 주의해야 합니다. 의 Conv2D 층에는 padding이 적용되지 않았고 kernel_size=3이 설정되었으므로 3×3 커널이 훑고 지나가면서 벡터의 차원을 2만큼 줄였습니다.
마지막 층의 벡터 값이 처음 입력 값과 같은 28×28 크기가 되는 것을 확인하면 모든 준비가 된 것입니다.
이제 이를 사용해 오토인코더를 완성하면 다음과 같습니다.