거의 한달만에 다시 작성하네요... ㅎㅎ

코딩시간은 기존에 해뒀던 자료이용써서 5분인데...

 

Keras와 CNN 모델로 Mnist데이터 학습시키기

0. 시작전에

- Keras는 Tensorflow를 사용하는 라이브러리입니다. 따라서 Keras설치시 Tensorflow를 먼저 설치해야합니다.

- Keras와 Tensorflow 설치는 다루지 않습니다.

- 이전 Tensorflow로 CNN조지기 편을 보신 후 와주시면 좀 더 이해하기 좋습니다.

2019/05/30 - [머신러닝/CNN] - [딥러닝 CNN] 1. CNN이란?

2019/05/31 - [머신러닝/CNN] - [딥러닝 CNN] 2. mnist데이터 CNN으로 조지기(with, Tensorflow)

1. 시작

1) 주피터 노트북을 켜주시고, 아래와 같이 라이브러리와 데이터를 불러와줍니다.

이전에 Tensorflow편에서 다뤘던 Mnist자료를 그대로 사용했습니다.

 

 

2) 다음으로 아래와 같이 변수들을 설정해주었습니다.

 - IMG_CHANNELS : 이미지 채널의 수를 말합니다. (ex, rgb = 3)

 - IMG_ROWS, IMG_COLS : 이미지의 가로, 세로 픽셀의 수를 말합니다.

 - BATCH_SIZE : Batch 사이즈를 설정합니다.

 - EPOCH : Epoch의 수를 설정합니다.

 - NB_CLASSES : Y값이 몇개의 값을 갖고 있는 배열인지를 의미합니다. 우리는 0~9까지 One-hot결과를 Y값으로 사용하기 때문에 10으로 설정해주었습니다.

 - VERBOSE : Keras의 학습 단계에서 진행상태를 어떻게 표시할 것인지를 설정해주는 것입니다.

         (0 = silent, 1 = progress bar, 2 = one line per epoch.)

 - VALIDATION_SPLIT : 학습시 데이터를 일부 나눠서 Validation으로 사용할 비율을 의미합니다.

         (mnist데이터에 validation data가 별도로 존재하기는 하지만, 그냥 Train데이터의 20%를 사용했습니다.)

 - OPTIM : 옵티마이저를 어떤것으로 사용할 것인지를 의미합니다.

 

 

3) 데이터 셋팅하기

 

학습하기 좋은 상태로 데이터를 만들어줍니다.

X데이터 = [ 55000개의 이미지, 28x28의 크기, 1개의 채널 ] 을 의미합니다.

 

이미지를 학인해보면 위와같은것을 볼 수 있습니다.

배열에 One-hot으로 0~9까지의 값이 나타나는 것을 볼 수 있습니다.

 

 

4) 모델 구축하기

모델은 정말 단순하게 만들었습니다.

 

Convolution 단계 하나를 거친 후 바로 Flatten해서 바로 하나의 네트워크를 거쳐 Y값으로 나가는 정~~~~말 간단한 모델입니다.

 

 

5) 학습시키기

 

간단한 모델을 사용해도 이정도 정확도... ( Adam의 힘인가... )

맥북에서 학습시켰더니 역시 CPU버전이라 그런지 느리더군요....;;

 

 

6) 결과 확인하기

 

evaluate 함수를 이용해서 최종적으로 test accuracy를 확인해보니 98.7% 정도가 나오네요.

>> 양호

 

X_test 데이터중 하나를 뽑아서 확인해보니 위와같은 결과를 볼 수 있었습니다.

 

누가봐도 6인 데이터고, 모델도 예쁘게 6이라고 잘 예측한 것을 볼 수 있었습니다.

 

착하다 ㅎㅎ

 

 

2. 마무리

mnist 데이터 자체가 너무 잘 만들어진(?) 데이터여서 CNN을 이용하면 어떻게 해도 90%이상의 Accuracy를 얻을 수 있습니다.

그러니 여러분들도 한번 자기만의 방법으로 모델을 만들어보시기 바랍니다. ( 옵티마이저를 변경하는 것만으로도 차이가 크니 Adam추천 )

 

Keras로 모델을 구현할 때 저는 Dense를 사용했는데, 다른 방법도 존재합니다. 그부분은 다음에 다루겠습니다.

 

이 다음에는 어떤 이미지를 학습할까 고민중되네요.

+ Recent posts