그림 19-7을 보면 입력한 이미지와 똑같은 크기로 출력층을 만들었습니다. 그리고 입력층보다 적은 수의 노드를 가진 은닉층을 중간에 넣어서 차원을 줄여 줍니다. 이때 소실된 데이터를 복원하기 위해 학습을 시작하고, 이 과정을 통해 입력 데이터의 특징을 효율적으로 응축한 새로운 출력이 나오는 원리입니다.
가장 핵심이 되는 인코딩과 디코딩 과정을 코딩해 보면 다음과 같습니다.
# 생성자 모델 만들기 = Sequential() # 인코딩 부분 .add(Conv2D(16, =3, ='same', =(28, 28,1), ='relu')) ----- ➊ .add(MaxPooling2D( =2, ='same')) ----- ➋ .add(Conv2D(8, =3, ='relu', ='same')) ----- ➌ .add(MaxPooling2D( =2, ='same')) ----- ➍ .add(Conv2D(8, =3, =2, ='same', ='relu')) ----- ➎ # 디코딩 부분 .add(Conv2D(8, =3, ='same',
='relu')) ----- ➏ .add(UpSampling2D()) ----- ➐ .add(Conv2D(8, =3, ='same', ='relu')) ----- ➑ .add(UpSampling2D()) ----- ➒ .add(Conv2D(16, =3, ='relu')) ----- ➓
-----
.add(UpSampling2D())1, =3, ='same', ='sigmoid')) -----
.add(Conv2D(
# 전체 구조 확인
-----
.summary()