본문 바로가기

BLOG/딥러닝

<AE 이미지 생성 실습> 직접 코드 구현해보기

【7】AutoEncoder 기본 다지기 / 이미지 생성 실습으로 익히는 AE 

 

 

이번에는 AE 모델을 만들어보자

 

try:

  %tensorflow_version 2.x"

except Exception:

  pass

import tensorflow as tf 



import numpy as np

from tensorflow.keras import layers,models,datasets

import matplotlib.pyplot as plt

 

모델을 작성하기 전 간단히 패키지를 선언한다.

 

(x_train,_),(x_test,_) = datasets.mnist.load_data()

 

학습에 사용할 데이터셋은 Mnist이고

AE 비지도 학습이므로 y 값을 불러 필요가 없다.

 

x_train = x_train.astype('float32') / 255.0

x_test = x_test.astype('float32') /255.0

x_train = x_train.reshape(-1,784)

x_test = x_test.reshape(-1,784)

 

AE 학습하기에 앞서 데이터셋을 바꿔줘야 필요가 있다.

AE 순방향 신경망 사용하기 때문에 2차원의 형태로 바꿔줘야 하고 데이터의 값 또한 정규화를 해줄 필요가 있다.

 

Hidden_input = 48 #압축 크기

 

input_layer = layers.Input(shape=(784,))  

Encoding = layers.Dense(Hidden_input)(input_layer) 

Decoding = layers.Dense(784, activation='sigmoid')(Encoding) 

 

autoencoder = models.Model(input_layer,Decoding) 

 

encoder = models.Model(input_layer,Encoding) 

encoded_input = layers.Input(shape=(Hidden_input,)) 

 

decoder_layer = autoencoder.layers[2]

 

decoder = models.Model(encoded_input,decoder_layer(encoded_input))

 

AE 모델을 만들자.

 

여태까지 모델을 만들었을 때는 시퀀셜(sequential) 사용하여 모델을 만들었지만

이번에 사용하는 데이터셋은 시계열 데이터가 아니기 때문에 사용하지 않는다.

 

그래서 입력크기를 지정을 해야하는데 입력레이어를 만들어 해당 역활을 하게 한다. 

 

AE 구조는 간단히 설명하면 이미지를 압축 다시 원복 시키는 형태를 띈다.

이미지를 원복시키는 과정에서 손실이 발생하게 된다.

 

autoencoder.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])

 

컴파일 코드다.

사용한 옵티마이저는 아담이고, 로스는 이진크로스엔트로피를 사용하였다

(ps.이진 크로스엔트로피는 시그모이드엔트로피라고 불립니다)

 

autoencoder.fit(x_train,x_train,epochs=50,shuffle=True,validation_data=(x_test,x_test))

 

학습을 진행한다.

y 값의 y_train 아닌 x_train 넣음으로써 비지도학습인 것을 나타낸다.

 

predict_encoded_img = encoder.predict(x_test)

predict_decoded_img = decoder.predict(predict_encoded_img)

 

학습이 끝난 모델을 x_test 넣어 예측을 해보자.

 

 

원래 이미지와 예측한 이미지를 비교를 해보자

위에 있는 이미지가 원본 이미지고 아래에 있는 이미지는 예측 이미지

이미지를 볼 때는 원본 이미지의 형태를 띄는 것처럼 보이지만 자세히 보면 군데군데 이미지의 손실이 발생한 것을 확인 있다

AE 압축 과정에서 이미지의 손실이 발생하는게 가장 원인이다

 

 

 

 


작성자 김강빈 kkb08190819@gmail.com / 이원재 ondslee0808@gmail.com