Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Deep Learning/[Books] 머신러닝, 딥러닝 실전 앱 개발

딥러닝 모델 생성, 컴파일 그리고 학습시키기

Kellyyyy 2020. 5. 7. 08:00

* 저는 머신러닝/딥러닝에 관해 공부하고 있는 사람입니다.

잘못된 내용이나 참고할 만한 내용이 있다면 댓글로 남겨주시면 정말 감사드리겠습니다!

 

이번 포스팅에서는 예측을 수행하는 딥러닝 모델을 만들고 학습을 시켜보겠다.

 

크게 3단계로 나눌 수 있다.

 

STEP 1. 모델 생성

STEP 2. 컴파일

STEP 3. 학습 수행

 

단계별로 살펴보겠다.

 

Step 1. 모델 생성

모델 생성 단계는 예측을 하기 위한 모델의 껍데기/틀을 만드는 단계이다.

 

x = 1 , -2 , 5 , 7 ... 
y = 2 , 5 , 3 , 7 ...

 

위와 같이 x,y값이 주어졌을 때 x에 대한 y의 식을 대략적으로 가늠해보는 단계이다.

"음.. 대충 y = a*x + b 라고 할 수 있겠는 걸..?" 라는 식이다.

이 단계에서는 a,b 값이 정확히 무엇인지는 모른다.

껍데기만 만들어놓는 단계이다.

 

위 사례에서 나는 주어진 상황에 대해 1차방정식이라는 수학 모델을 채택했다.

이번 머신러닝/딥러닝 시리즈에서는 MLP(다층 퍼셉트론)라는 모델을 선택했다.

 

그렇다면 MLP 껍데기를 만들기 전에, MLP가 어떤 모델인지 간략하게 설명해보겠다.

 

MLP란 Multi-Layer Perceptron, 다층 퍼셉트론이다.

퍼셉트론이란 인공뉴런을 말한다.

인공뉴런은 우리 뇌의 뉴런을 형상화해놓은 인공적인 구조이다. 

그 구조는 아래와 같다.

뉴런과 인공뉴런

인공뉴런은 우리 뉴런과 같이

입력을 기반으로 출력을 결정하는 모델이다.

위 이미지에서 x는 입력, y는 출력을 의미한다.

 

이해를 돕기 위해 아이패드 구매에 대한 의사결정 과정을 인공뉴런을 통해 설명해보겠다.

 

출력 y는 아이패드를 산다/사지 않는다의 결과를 의미한다.

아이패드를 사면 y = 1 , 사지 않으면 y = 0이다.

 

입력 x는 아이패드를 사야하는 이유라고 할 수 있다.

- x1 ) 현재가 아이패드를 사야하는 시기인가?

- x2 ) 아이패드를 사기 위한 예산은 충분한가?

- x3 ) 아이패드의 장점은 충분한가?

 

여기서 모든 이유(x)가 똑같은 중요성을 갖진 않는다.

부자인 사람에게는 x2는 중요도가 낮을 것이고, 

어제까지 아이패드를 활발히 사용하다가 오늘 고장난 사람에게는 x1의 중요도가 높을 것이다.

 

이런 상황을 반영하기 위해 각 x에 가중치(w)를 부여한다.

부자인 사람의 경우에는 w1 = 5, w2 = 2, w3 = 3인 식이다.

 

이를 바탕으로 하나의 의사결정 모델(껍데기)을 만들 수 있다. (STEP 1)

if (x1 * w1) + (x2 * w2) + (x3 * w3) > k 

       : 사기

else : 사지 않기

 

이런 껍데기 모델에 많은 데이터를 학습시켜  

적절한 y 값을 찾는 가중치 w와 역치 k 값을 찾으며 의사결정 모델을 완성한다. (STEP2, STEP3)

 

w와 k가 결정되면 새로운 x가 입력되었을 때 y 값을 결정할 수 있다.

예측이 이뤄지는 것이다.

 

이런 퍼셉트론을 다층으로 쌓아 정교화시킨 모델이 다층퍼셉트론, MLP모델이다.

 

다층퍼셉트론(MLP)

여기서 layer 안에 있는 직사각형이나 원(퍼셉트론)은 유닛이라고 부른다.

나는 은닉층이 없고 입력, 출력층만 존재하는 단순한 다층퍼셉트론 모델을 만들 것이다. 

 

MLP 모델을 만드는 방법은 Tensorflow의 keras 모듈을 이용하면 아주 간단하다.

 

 

from keras.models import Sequential
from keras.layers import Dense

#입력 데이터 크기 : 32*32 픽셀, RGB형 이미지 데이터 (데이터 전처리 포스팅 참고)
in_size = 32*32*3 

#출력 데이터 크기 : 10개의 카테고리
num_classes = 10

#[1]
model = Sequential()
#[2]
model.add(Dense(512, activation='relu', input_shape=(in_size,)))
#[3]
model.add(Dense(num_classes,activation='softmax'))

 

 

[1] keras는 sequential 함수를 제공하는데, 층을 차례대로 쌓은 모델을 만들어준다.

[2] 512개의 유닛을 가진 입력 layer를 만든다. activation은 층의 활성화함수(의사결정 함수)를 설정하는 매개변수다. 대표적인 함수 중 하나인 relu를 사용했다.

[3] 10가지 카테고리 중 하나로 이미지를 분류할 것이기 때문에 10개의 유닛을 가진 출력 layer를 생성했다. 활성화함수는 softmax를 사용했다.

 

 

파이썬 sequential() 함수

 

STEP 2. 컴파일하기

컴파일이란 모델을 학습시키기 위한 학습과정을 설정하는 단계이다.

compile 함수를 사용하여 설정할 수 있다. 

 

 

model.compile(
    #[1]
    loss = 'categorical_crossentropy',
    #[2]
    optimizer = 'adam',
    #[3]
    metrics = ['accuracy']
)

 

 

[1] 손실함수를 지정한다. 손실함수를 최소화하는 방향으로 가중치(w)와 역치(k)를 수정하게 된다. 대표적인 손실함 수 중 하나인 categorical_crossentropy 함수를 사용했다. 

[2] 훈련과정을 설정한다. 이 함수를 최적화하는 방향으로 학습이 일어나는 대표적인 함수 중 하나인 adam을 사용했다. 

[3] 훈련과정을 모니터링하는 방식을 지정한다. accuracy를 지정하면 학습과정에서 정확도를 수집한다. 

 

 

파이썬 compile() 함수

 

STEP 3. 학습시키기

본격적으로 학습데이터를 주입해 모델을 만드는 단계이다.

fit 함수를 사용한다.

 

 

hist = model.fit(X_train, y_train,
                batch_size=32, #[1]
                epochs=50, #[2]
                verbose=1,
                validation_data=(X_test, y_test)) #[3]

 

 

[1] MLP 모델은 데이터를 작은 배치로 나누고 훈련과정에서 순회하는 방식으로 학습을 진행한다. batch_size는 1회 계산에 사용한 데이터를 지정한다. 

[2] 에포크 = 1 은 전체 입력 데이터를 한번 순회한다는 것을 의미한다. 50으로 지정해 50번 순회하도록 했다. 

아래 이미지를 보면 보다 직관적으로 이해가 가능하다. 

[3] 에포크가 한번 끝날 때마다 검증데이터를 통해 데이터의 손실과 측정 지표를 출력한다. 검증데이터로 쓸 데이터를 지정한다. 

 

 

파이썬 fit() 함수

 

 

한 에포크가 끝날 때마다 loss, accuracy 등을 출력한다.

2번째 에포크를 수행했을 때 첫번째 에포크보다 지표가 나아진 것을 확인할 수 있다.

 

자, 이제 데이터 학습까지 끝났다. 

예측하기 위한 모델이 만들어 진 것이다.

다음 포스팅에서는 학습 과정을 그래프로 그려보고, 

내가 직접 찍은 사진으로 모델을 평가해볼 것이다. 

 

참고문헌

[1] 도서 - 파이썬을 이용한 딥러닝, 머신러닝 실전 앱 개발

[2] 케라스: 빠르게 훑어보기https://www.tensorflow.org/guide/keras/overview#tfkeras_%EC%9E%84%ED%8F%AC%ED%8A%B8

 

케라스: 빠르게 훑어보기  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수 있습니다. 이 번역에 개선할 부분이 있다면 tensorflow/docs 깃헙 저장소로 풀 리퀘스트를 보내주시기 바랍니다. 문서 번역이나 리뷰에 참여하려면 docs-ko@tensorflow.org로 메일을 보내주시기 바랍니다. tf.keras 임포트 tf.keras는 케

www.tensorflow.org