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

[Tensorflow] 18. keras EarlyStopping() 사용해보기

by 선의공 2024. 1. 13.
반응형

 

 

 

이번 포스팅에서는

keras의 callbacks 모듈 중 

EarlyStopping()을 사용해보겠습니다.

 

 


 

1. keras의 callbacks 모듈 

 

궁금해서 먼저 callbacks 모듈을 

들여다보겠습니다.

공식문서에서는 model.fit() 함수 내에

callbacks 파라미터에

배열 형태로 받네요.

https://keras.io/api/callbacks/

 

Keras documentation: Callbacks API

Callbacks API A callback is an object that can perform actions at various stages of training (e.g. at the start or end of an epoch, before or after a single batch, etc). You can use callbacks to: Write TensorBoard logs after every batch of training to moni

keras.io

 

 

여기에 자주 사용되는 유용한

콜백 클래스를 잘 정리해 주셨습니다.

제가 오늘 다룰 EarlyStopping도 기재되어있네요.

오늘은 EarlyStopping에 집중해서 포스팅해보겠습니다.

 

https://wikidocs.net/194134

 

keras.callbacks 모듈

keras.callbacks는 Keras 모델의 학습 과정 중에 호출되는 콜백 함수들을 포함하는 모듈입니다. 콜백 함수들은 모델 학습 도중에 지정된 시점에서 호출되어 추가적인 작…

wikidocs.net

 

 


 

2. EarlySopping 

 

 

"모델이 더 이상 개선되지 않을때 학습을 자동으로 종료합니다"

 

위에서 정의되었 듯

예를들어 모델을 에포크 500으로 학습을 시킬때

에포크 200부터 로스의 감소가 진행되지 않는다면

지정해준 기준으로 

훈련을 일찍 스톱시키는 기능을 합니다.

 

아래는 공식 문서에 나와있는 파라미터와 기본값입니다.

 

  • monitor : 모니터링 할 기준을 정하는 파라미터입니다.
  • min_delta : 개선 자격을 갖추기 위한 모니터링 수량의 최소 변화라고 합니다. 즉 min_delta 미만의 절대 변화는 개선이 없는 것으로 간주됩니다.  min_delta = 0.1 이라면 현재 loss가 0.5 이고 다음 에폭의 loss가 0.39라면 모니터링 되지 않는다는 뜻 같네요. 
  • patience : 몇 에포까지 지켜볼지 정해줍니다. 예를들어 10을 주면 최소 loss 이후 10번을 더 세고 더 낮은 loss가 없으면 중단시킵니다.
  • verbose : 자세한 정보 표시 설정이라고하네요. 0은 자동 모드이고  1은 콜백이 작업을 수행할 때 메시지를 표시합니다. 
  • mode : {"auto", "min", "max"}. 중 하나입니다.  min은 최소값을 감시, max는 최대값을 감시, auto는 알아서 해준다고 합니다.
  • baseline: patience에서 설정한 감시 에포 내에 모니터링 하는 값이 정해준 값에 못미치면 스톱한다고 합니다.
  • Restore_best_weights : 가장 좋은 값을 가진 에포크의 모델 가중치를 복원할지 여부입니다. False = 복원하지 않음. True.= 복원입니다.
  • start_from_epoch : 설정해준 에포크 이후에 모니터링이 시작되는 것 같습니다.

 

3. 사용방법

 

아까 본듯

EarlySropping을 객체화해서

model.fit() 함수 내에

callbacks 파라미터에

배열 형태로 넣어주겠습니다.

 

먼저 import 를 해줄게요.

keras의 callbacks모듈에 있습니다.

# EarlyStopping
from keras.callbacks import EarlyStopping

 

 

EarlyStopping을 인스턴스화 해주겠습니다.

 

저는

"val_loss를 기준으로

낮은 값을 모니터링 하고

10 에포크 동안 낮은 값이 없으면

스톱할 예정입니다.

이 중 가장 좋은 가중치를 복원하겠습니다."

라고 설정해주었씁니다.

from keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', mode='min', patience=10, restore_best_weights=True)

 

이제 생성한 EarlyStopping()객체를

model.fit()의 callbacks 파라미터에 넣어주면 됩니다.

history = model.fit(x_train, y_train, epochs=1000, batch_size=100, 
				validation_split= 0.3, callbacks=[es])

 

 

전 1000 에폭를 줬는데,

96번을 학습하고 끝났네요!

얼리스탑이 잘 걸린 것을 확인할 수 있습니다.

 

 

 

 

제가 생각했을때는 

많은 에폭과

큰 patience를 주고

restore_best_weights를 True로 설정하면

가장 좋은 값이 나오지 않을까 했는데

지금은 많은 데이터를 접하지 않아봐서

잘 와닿지 않습니다..!

 

적절히 사용하는

방법을 계속 사용하면서

익혀나가야 할 것 같습니다

 

 

 

틀린점 있으면 지적 부탁드립니다!

 

반응형