본문 바로가기

딥러닝

모두의 딥러닝 (10) - 베스트 모델 만들기

이번 딥러닝에 사용할 데이터는 포르투갈 서북쪽의 대서양을 맞닿고 위치한 비뉴 베르드 지방에서 만들어진 와인을 측정한 데이터! 레드와인 샘플 1,599개를 등급과 맛, 산도를 측정해 분석하고 화이트와인 샘플 4,898개를 마찬가지로 분석해 데이터를 만듬.

먼저 데이터의 처음 5줄을 출력해보면

frac를 1로 잡으면 딥러닝을 실행하는데 오래 걸리기 때문이다.

그리고 보다시피 한 줄당 모두 13개의 정보가 있는 걸 확인!

즉, 12개(0~11)의 속성을 가지고 13번째 클래스를 예측하는 프로젝트!

이 장의 제목처럼 우리는 딥러닝을 실행할 때 최고의 모델을 얻어내야 한다.

따라서 이에 따라 딥러닝을 실행해보자!

설명에 적혀있는대로 모니터할 값과 ModelCheckPoint라는 함수를 이용해 save_best_only=True라는 속성을 통해 최고의 모델만 저장하도록 한다. 즉, 이전 모델보다 값이 좋아지면 저장되게 하고 그렇지 않으면 저장되지 않음!

모델이 학습되는 과정을 history 변수를 만들어 저장하고 긴 학습의 예시를 얻기 위해 epoch를 3500으로 정했다! 배치크기는 500으로 늘려 한 번 딥러닝을 가동할 때 더 많이 입력되게 했고 불러온 샘플 중 33%(validataion_split= 0.33)는 분리하여 테스트셋으로 사용.

다음으로 y_vloss에 테스트셋(33%)으로 실험한 결과의 오차값을 저장!

              y_acc에 학습셋(67%)으로 측정한 정확도의 값을 저장!

x 값을 지정하고 정확도파란색, 오차빨간색으로 표시하면 위 그림의 그래프가 나온다!

앞서 공부한 대로 학습셋의 정확도(파란색 그래프)는 시간이 흐를수록 좋아지는데 테스트 결과(빨간색 그래프)는 어느 정도 시간이(1000번 정도) 지나면 더 나아지지 않음! -> 과적합

 

이렇게 학습이 진행되면 테스트셋의 실험 결과가 점점 나빠지므로 케라스에서는 이렇게 학습이 진행되면 테스트셋의 오차가 줄지 않을 때 학습을 멈추게 하는 함수가 있는데 

바로 EarlyStopping() 함수!

EarlyStopping() 함수에 모니터할 값, 테스트 오차가 좋아지지 않아도 몇 번까지 기다릴지의 횟수를 정하고 이를 early_stopping_callback에 저장! 

이제 앞서 정한 에포크 수, 배치 크기 등을 저장하고 early_stopping_callback 값을 불러오면

 

이렇게 테스트셋의 오차가 줄어들지 않자 학습이 중단된다.

Epoch 00806에서 멈췄다는 말은 Epoch 00706에서의 모델의 테스트셋 오차가 100번의 에포크를 거치는 동안 나아진 것이 없다는 의미다. 이렇게 EarlyStopping()함수를 통해 과적합을 방지!

 

지금까지 따라오셨다면 어느 정도 딥러닝의 기본 개념은 이해함에 충분하다!!

이제는 딥러닝의 가장 대표적인 활용법 CNN, RNN에 배워보자!