이번 포스팅에서는
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에 집중해서 포스팅해보겠습니다.
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로 설정하면
가장 좋은 값이 나오지 않을까 했는데
지금은 많은 데이터를 접하지 않아봐서
잘 와닿지 않습니다..!
적절히 사용하는
방법을 계속 사용하면서
익혀나가야 할 것 같습니다
틀린점 있으면 지적 부탁드립니다!
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
[Tensorflow] 20. 다중 분류(Multiclass Classification) (1) | 2024.01.13 |
---|---|
[Tensorflow] 19. 이진분류(Binary Classification) (1) | 2024.01.13 |
[Tensorflow] 17. loss 값 시각화 해보기 (1) | 2024.01.13 |
[Tensorflow] 16. 데이터쪼개기 2) validation data (2) | 2024.01.13 |
[Tensorflow] 15. 선형회귀 평가방식(MSE, MAE, RMSE) (2) | 2024.01.13 |