Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

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

딥러닝 모델 평가 & 모델 저장하기

Kellyyyy 2020. 5. 11. 08:00

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

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

 

이번 포스팅에서는 지난 포스팅에서 생성한 모델의 정확도를 평가하고,

모델을 저장하는 법에 대해서 다룬다.

 

1. 모델 평가

evaluate 함수를 사용하면 모델의 최종적인 정답률과 loss 값을 알 수 있다.

loss는 예측값과 실제값이 차이나는 정도를 나타내는 지표이다. 

작을 수록 좋다.

 

 

score = model.evaluate(X_test, y_test, verbose=1)
print('정답률 = ', score[1],'loss=', score[0])

 

파이썬 evaluate 함수

정답률이 0.4796으로 생각보다 낮게 나왔다.

이는 2번 판정하면 1번 이상을 잘못 판정한다는 이야기이다.

이런 경우에는 입력데이터 수를 더 늘린다던가, 활성화함수 또는 모델을 바꿔서 정확도를 개선하는 방법이 있다.

 

우선 이번 시리즈에서는 딥러닝 모델을 사용해보는 것이 목표였으니 

모델 개선은 미뤄두고, 학습 과정에서 정답률과 loss의 추이를 그래프로 그려 확인해보겠다.

 

학습과정을 hist라는 변수에 담아두었기 때문에 history라는 속성을 사용하여 정확도와 loss 값의 변화를 확인할 수 있다.

 

 

plt.plot(hist.history['acc'])
plt.plot(hist.history['val_acc'])
plt.title('Accuracy')
plt.legend(['train','test'], loc='upper left')
plt.show()
plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('Loss')
plt.legend(['train','test'], loc='upper left')
plt.show()

 

 

acc, loss는 train set의 지표들이고, val_acc, val_loss는 validation set의 지표이다.

그래프는 아래 그림과 같다.

 

 

plot 함수

 

 

train set의 정답률은 반복횟수가 높을수록 높아지고, loss는 낮아졌다. 

validation set의 정답률과 loss는 들쑥날쑥한 것을 볼 수 있는데, 모델의 정확도가 높지 않다는 것을 알 수 있다.

 

 

2. 학습 결과 저장하기

직접 실습해봤다면 알겠지만, 학습 과정에 꽤 많은 시간이 소요된다.

심지어 MLP는 단순한 모델에 속해 시간이 적게 걸리는 편에 속한다.

CNN 같은 모델은 훨씬 더 많은 시간이 필요하다.

 

예측을 할 때마다 모델을 만드려면 시간이 무척 오래걸릴 것이다. 

이 때, 모델을 구성하는 가중치 등 모델 생성에 필요한 데이터를 저장해두면

다음에 예측할 때 시간을 단축시킬 수 있다.

 

save_weights라는 함수를 사용하면 간단하게 저장할 수 있다.

 

 

model.save_weights('cifar10-weight.h5')

 

 

save_weights함수

 

프로젝트 위치를 확인해보면 cifar10-weight.h5 파일이 생성되어있는 것을 확인할 수 있다.

 

cifar10-weight.h5

저장한 가중치 데이터를 다시 읽어들일 때는 load_weights 함수를 사용하면 된다.

 

model.load_weights('cifar10-weight.h5')

 

자, 그럼 내가 생성한 MLP 모델을 평가하고 저장했다.

다음 포스팅에서는 내가 직접 찍은 사진을 모델에 입력해 어떤 카테고리로 예측하는지 확인해볼 것이다.