본문 바로가기
인공지능 개발하기/Machine Learning

[Tensorflow] 17. loss 값 시각화 해보기

by 선의공 2024. 1. 13.

 

 

이번 포스팅에서는

제가 너무나도 해보고 싶었던

(눈으로 보이는게 가장 재밌습니다..)

 

loss 가 떨어지고 튀는 구간을 눈으로 확인해보기 위해

그래프로 그려서 분석해보겠습니다.

튀는 구간이 과적합이 발생한 구간이겠죠.

 

그러기 위해서는 일단 loss 값의 묶음(기록)들이 필요합니다.

(어떻게 변화하는지를 그래프에 그려야 하기 때문!)

 


 

1. loss 값 기록 가져오기

 

저희가 계속 사용한

keras 의 Model

 fit()함수에 

반환값이 있다는걸 아셨나요?

도큐먼트를 확인하면

 

https://keras.io/api/models/model_training_apis/

 

Keras documentation: Model training APIs

Model training APIs [source] compile method Model.compile( optimizer="rmsprop", loss=None, loss_weights=None, metrics=None, weighted_metrics=None, run_eagerly=False, steps_per_execution=1, jit_compile="auto", auto_scale_loss=True, ) Configures the model fo

keras.io

loss values 와 metrics values 가 보이네요

이런 값이 담긴 History object를 반환한다고 합니다. 

반환 값을 한번 찍어보겠습니다.

 

history = model.fit(x_train, y_train, epochs=100, batch_size=100, validation_split= 0.3) 
print(history.history)

 

한 에포크 마다의 loss값,

val_loss 값이 담겨있네요!

 

val_loss가 담긴 이유는

이전 포스팅에서 다룬 validation_splits을 사용했기 때문입니다.

https://aigaeddo.tistory.com/20

 

16. 데이터쪼개기 2) validation data

지금까지는 모델을 훈련 시킬때 훈련 데이터만 넣어 훈련시켰습니다. 해당 포스팅에서도 이 내용을 다뤘었죠! https://aigaeddo.tistory.com/10 7. 데이터) 데이터 쪼개기 (훈련 데이터, 평가 데이터) 전에

aigaeddo.tistory.com

 

 


2. 시각화하기

 

시각화 하는 방법도

예전에 정리를 했었습니다.

https://aigaeddo.tistory.com/13

 

10. 모델 훈련 결과 시각화 하기 (feat. matplolib)

이번 포스팅은 모델 훈련 결과를 시각화 해보겠습니다. 데이터를 그래프로 나타낼건데요, matplotlib라는 패키지의 도움을 받아보겠습니다~ 먼저 이 패키지가 무엇인지 알아야 사용을 할 수 있을

aigaeddo.tistory.com

 

 

matploblib의 pyplot을 사용하면 되는데요,

history에 담긴 loss들을 선으로 그려주겠습니다.

loss_hist = history.history['loss']
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5)) #그래프 출력 도화지 비율 설정
plt.plot(loss_hist) # 선 그리기
plt.show() #그래프 보여주기

 

뭔가 밋밋하죠?

이번엔

라인 색, 라인 마커, 레이블과 타이틀도 추가해볼게요.

 

   import matplotlib.pyplot as plt
   plt.figure(figsize=(10,5))
   plt.plot(loss_hist, color = 'red' , marker = '.') #color : 색, marker : 점찍어줌
   plt.title("loss graph") #title
   plt.xlabel("epoch") #x 레이블
   plt.ylabel("loss") #y 레이블
   plt.show()

 

 

여기에 val_loss도 비교해보고 싶어서

이것도 추가해보겠습니다.

범례도 같이 추가해볼게요.

loss_hist = history.history['loss']
val_loss_hist = history.history['val_loss']
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.plot(loss_hist, color = 'red', label = 'loss',  marker = '.') #color : 색, marker : 점찍어줌
plt.plot(val_loss_hist, color = 'blue', label = 'val_loss',  marker = '.') #color : 색, marker : 점찍어줌
plt.title("loss graph") #title
plt.xlabel("epoch")
plt.ylabel("loss")
plt.legend(loc='upper right') #우측 상단 범례 표시, (lower, upper,left, right)조합으로 위치 설정
plt.show()

 

 

에포크를 1000으로 늘려보면

더이상 loss가 내려가지 않고 튀는 구간이 있네요.

이렇게 시각적으로

과적합 구간을 찾아나갈 수 있습니다.

 

 

 

 

 

 

추가적인 matplotlip 사용법은 요기 잘 정리되어 있으니

참고하세요!

https://codetorial.net/matplotlib/index.html

 

Matplotlib Tutorial - 파이썬으로 데이터 시각화하기 - Codetorial

이 튜토리얼에서는 Matplotlib의 간단한 사용법을 소개하고, 예제와 함께 다양한 그래프를 그려봅니다. 순서는 아래와 같습니다.

codetorial.net

 

 

잘못된 부분이 있다면 지적부탁드립니다!