# AI 이론/DeepLearning

케라스를 이용한 이미지 분류기 만들기

alz 2022. 4. 18. 14:17
케라스란?

케라스는 모든 종류의 신경망을 손쉽게 만들고 훈련, 평가, 실행할 수 있는 고수준 딥러닝 API

 

 

import tensorflow as tf 
import tensorflow import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 

데이터셋을 적재(픽셀 강도는 0~255 바이트로 표현되어있습니다)

(X_train_full, y_train_full), (X_test,y_test) = keras.datasets.mnist.load_data()

X_train_full.shape # (60000,28,28)
X_train_full.dtype # dtype('uint8')

 

전체 훈련 세트를 검증 세트와 더 작은 훈련 세트로 나누고, 픽셀강도를 0-1 범위의 실수로 변환합니다.

X_valid, X_train = X_train_full[:5000] / 255. , X_train_full[5000:] / 255. 
y_valid, y_train = y_train_full[:5000] , y_train_full[5000:] 
X_test = X_test / 255.

 

맷플로립의 imshow() 함수와 binary 컬러맵으로 첫번째 데이터를 출력 해보면,

다음과 같은 데이터를 출력할 수 있습니다.

 

위와 같이 데이터셋에 있는 이미지 샘플 40개 정도를 더 추출해보겠습니다.

 

위에서는 적재된 MNIST 데이터셋의 이미지를 나타내보았고, 다음은 간단한 밀집 신경망을 만들고 최적의 학습률을 찾아보겠습니다. 반복마다 학습률을 증가 시키기위해 callback을 사용합니다.

 

keras.backend.set_value(old,new) : old값을 new값으로 바꿔줍니다.

 

이제 모델을 생성해 보겠습니다.

이 모델은 2개의 은닉층을 갖고, 하나의 출력층을 갖습니다.

 

이제 모델의 loss, optimizer, metrics을 정해야 하므로 compile() 메서드를 사용합니다.

 

이 모델을 1 에포크만 훈련해보고 이에 대한 손실함수를 그려보겠습니다.

 

학습률이 6e-1을 지날때 급격하게 증가하므로 3e-1을 학습률로 사용하여 다시 모델을 만들어보겠습니다.

 

이 모델로 훈련을 다시 수행해보면,

약 98%의 정확도가 나오는것을 확인할 수 있습니다.