실습 | 오토인코더 실습하기
from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential, Model from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D, Flatten, Reshape import matplotlib.pyplot as plt import numpy as np # MNIST 데이터셋을 불러옵니다. ( , ), ( , ) = mnist.load_data() = .reshape( .shape[0], 28, 28, 1).astype('float32') / 255 = .reshape( .shape[0], 28, 28, 1).astype('float32') / 255 # 생성자 모델을 만듭니다. = 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()) .add(Conv2D(1, =3, ='same', ='sigmoid')) # 컴파일 및 학습을 하는 부분입니다. .compile( ='adam', ='binary_crossentropy') .fit( , , =50, =128, =( , )) # 학습된 결과를 출력하는 부분입니다. = np.random. ( .shape[0], =5) # 테스트할 이미지를 랜덤으로 호출합니다. = .predict( ) # 앞서 만든 오토인코더 모델에 넣습니다. plt.figure( =(7,2)) # 출력 이미지의 크기를 정합니다. for , in enumerate( ): # 랜덤으로 뽑은 이미지를 차례로 나열합니다. = plt.subplot(2, 7, +1) # 테스트할 이미지를 먼저 그대로 보여 줍니다. plt.imshow( [ ].reshape(28, 28)) .axis('off') = plt.subplot(2, 7, 7+ +1) # 오토인코딩 결과를 다음 열에 입력합니다. plt.imshow( [ ].reshape(28, 28)) .axis('off') plt.show()