Keras 시작하기 - PART 2 : 데이터 적재와 이미지 분류기 - 3

(핸즈 온 머신러닝 4판을 보고 직접 해보면서 정리한 내용이 포함되어 있습니다.)

이전 포스트에서 훈련시켰던 모델을 평가해 보자. 훈련에 사용했던 fit 매서드는 훈련 파라미터, 수행된 에포크 리스트가 포함된 객체를 반환한다. 반환된 객체는 에포크가 끝날 때마다 훈련 세트와 검증 세트에 대힌 손실과 측정한 지표를 담은 딕셔너리 속성을 포함하는데 이 딕셔너리가 중요하다. 이 딕셔너리를 사용해서 판다스 데이터프레임을 만들고 plot() 메서도를 호출하면 학습곡선을 얻을 수 있다.

후련이 진행되는 동안 훈련세트의 로스는 계속 줄어들었지만 검증세트의 로스는 어느정도 까지만 감소하다가 다시 늘어나는 것을 볼 수 있다. 에포크 수를 늘려서 훈련 한 것과도 한 번 비교를 해보자.

에포크 수를 60으로 하고 훈련한 결과이다. 훈련세트에 대해서는 갈수록 로스가 줄어들고 정확도가 증가하지만 검증세트에 대해서는 그렇지 못하다는 것을 알 수 있다. 즉 에포크 수가 많아지만 그만큼 훈련세트에 대해서 과대적합이 이루어진다는 뜻이다. 따라서 검증세트의 로스가 더 이상 감소하지 않고 정확도가 증가 하지 않는 에포크 수 를 적절하게 찾아야 정확도가 높은 모델이 만들어 질것이다. class_weight를 지정하면 각 클래스별로 가중치를 설정할 수 있다. 클래스 별로 샘플의 개수가 차이가 많이나면 수가 적은 클래스에는 가중치를 부여할 수 있다. sample_weight를 지정하면 원하는 샘플에 가중치를 부여 할 수도 있다. 훈련시에 class_weight와 sample_weight 가 곱해져서 총 가중치가 된다. 추후에 거래량에 대한 가중치를 두면 좀더 정확한 모델이 나올 수 있을 것같다. 훈련에포크를 16정도로 설정해서 훈련시키고 평가를 해보자

이제 학습률, 옵티마이저, 층 개수, 뉴런 개수, 은닉층이 사용하는 활성화 함수, 배치 크기와 같은 모델의 하이퍼파라미터를 튜닝해 볼 수 있다.

Evaluate 매서드를 이용해서 테스트셋에서의 결과를 확인 할수 있다.

34/34 [==============================] - 0s 3ms/step - loss: 0.5782 - accuracy: 0.7078
[0.5782398581504822, 0.7077922224998474]

원하는 샘플에 대한 예측을 생성해 보자.

X_new = X_test[:3]
y_proba = model.predict(X_new)
y_proba.round(2)
>>
array([[0.25, 0.79],
    [0.21, 0.79],
    [0.17, 0.84]], dtype=float32)

Updated: