brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Apr 16. 2019

Python: m.l with Keras #6

MNIST, AI의 'hello world!'

MNIST, [엠니스트] 라고 읽던데 

'Mixed National Institute of Standards and Technology database'

요렇게 긴~~ 각 단어가 모여서 만들어진 약어다.


우선 Keras에서 

어떻게 MNIST를 학습하는지

목적이 무엇인지

어떤 결과를 얻는지

알아보자.


사실 모델을 구성하는 방법이 워낙 다양해서

꼭! 이렇게!! 만들어야 한다는 정석이 있지는 않다.


우선 데이터를 가져온다.


import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0


이상하게 import keras 가 안보인다.

사실 바로 keras 를 사용 할 수 있지만,

우리는 backend로 Tensorflow를 사용하고 있으니...


데이터를 가져와서 각 변수에 담고,

/255.0 으로 스케일링 해준다.



model = tf.keras.models.Sequential([

  tf.keras.layers.Flatten(input_shape=(28, 28)),

  tf.keras.layers.Dense(128, activation='relu'),

  tf.keras.layers.Dense(10, activation='softmax')

])


간단한 계층의 모델을 만든다.

사실 Keras의 강점이 바로 저 모델링에 있다.

MNIST 데이터의 특성이 바로 (Samples, 28, 28, 1) 이다.

하지만 여기서 CNN을 다루는 것이 아니기 때문에

채널까지(숫자 1 이 의미하는 것) 나타낼 필요가 없다.


(Samples, 28, 28) shape을 가진 데이터가 들어 올 것이고(우선 몇 개의 Sample인지는 모른다.)

우리는 128개의 layer에서 열심히 가중치를 변화시키면 학습을 진행 할 것이고

정규화나 드랍아웃 없이

바로 결과값 1나에 대해서 'softmax'를 이용한 분류 모델을 만든 것이다.



model.compile(optimizer='adam',

              loss='sparse_categorical_crossentropy',

              metrics=['accuracy'])


Tensorflow 였다면 먼저 loss함수를 선언하고, 어떻게 저 loss를 최소화 할 것인지에 대해서

로직을 구현한다.

Keras는 그냥 직관적으로 어떤 최적화 알고리즘을 사용하고

어떤 손실 함수를 이용하고

그래서 어떤 결과를 메트릭에 담을 것인가만

선언한다.



mnist_base_model_hist = model.fit(x_train, y_train, epochs=30, batch_size=32, validation_data=(x_test, y_test))


열심히 학습을 진행한다.



훈련 데이터 손실 vs. 검증 데이터 손실

학습한 결과물에서 손실(loss)에 대해서만 잠시 살펴보면

데이터가 워낙 잘 가공되어 있어서 저렇게 작은 오차가 발생한 것이다.


우선은 눈에 보이는 차이만 가지고 이야기하면

앞으로 300번, 3000번 학습을 시킨다고 가정하고

훈련 데이터와 검증 데이터의 손실값이 계속해서 커진다면

이를 과대적합 이라고 한다.


정말 주의해야 하는 부분이다.

과대적합이 일어난 모델은 무쓸모다.

하등 쓰잘때기가 없어서 그냥 쓰레기 모델을 만들었다고 생각하고

휴지통에 버려야 한다.


두 손실의 차가 학습이 진행 될 수록 커졌다는 의미는

저 모델은 훈련 데이터에서만 천재(내신은 1등),

검증 데이터에서는 바보(모의고사 9등급)

에 비유 할 수 있다.


끝.

작가의 이전글 Python: m.l with Keras #5
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari