반응형

텐서플로우 콜백함수 ModelCheckpoint, ReduceLROnPlateau, EarlyStopping를 다루고 있습니다. 



2021. 11. 17  최초작성




ModelCheckpoint

 

모델 또는 가중치를 저장할 때 사용되는 콜백함수입니다.

www.tensorflow.org/api_docs/python/tf/keras/callbacks/ModelCheckpoint 

 

 

 

인자 설명
filepath 모델 파일을 저장할 경로를 입력합니다. 
충돌이 나지 않도록 하기 위해 다른 콜백 함수에서 여기에서 지정한 경로를 사용하면 안됩니다. 
monitor 콜백함수에서 모델을 저장할때 기준이 되는 값을 지정합니다. 
loss, val_loss, accuracy, val_accuracy등을 지정할 수 있습니다. 

보통 Model.compile 메소드에 지정한 metrics과 관련된 것으로 지정합니다. 
verbose 1로 지정하면 모델 저장시 메시지가 출력되며 0으로 지정하면 아무 메시지도 출력되지 않습니다. 
save_best_only Ture로 설정하면 이전보다 성능이 좋은 경우에만 모델이 저장됩니다. 
save_weights_only Ture이면 모델 가중치만 저장되며
False이면 모델 전체가 저장됩니다. 
mode monitor가 accuracy 또는 val_accuracy로 지정된 경우에는 max로 해야 합니다. 이전 값보다 커지는 경우에만 모델이 저장됩니다. 

monitor가 loss 또는 val_loss로 지정된 경우에는 min으로 해야 합니다. 이전 값보다 작아지는 경우에만 모델이 저장됩니다. 

auto의 경우에는 monitor에 지정된 것을 보고 알아서 판단하여 모델이 저장됩니다. 
save_freq 값으로 문자열 'epoch' 또는 정수를 사용할 수 있습니다.  

문자열 'epoch'를 값으로 사용하면 각 epoch 끝날때 마다 모델을 저장합니다.

정수를 값으로 사용하면 지정한 정수만큼의 배치를 사용한 후, 모델을 저장합니다.

모델의 compile 메소드에 steps_per_execution=N 옵션을 추가했다면 N번째 배치마다 모델 저장 기준이 되었는지  확인합니다. 

모델 저장이 epoch에 맞춰지지 않으면 모니터링되는 측정항목의 신뢰성이 떨어질 수 있습니다. 왜냐하면 메트릭은 매 epoch마다 재설정되므로 1 배치만큼 적게 반영될 수 있습니다. 

디폴트 값은 'epoch'이므로 각 epoch 끝날때 마다 모델을 저장합니다.
options save_weights_only가 true인 경우 tf.train.CheckpointOptions 객체 또는 tf.saved_model을 제공할 수 있습니다. 

SaveOptions object if save_weights_only is false.

save_weights_only가 false인 경우에는 SaveOptions 객체를 제공할 수 있습니다. 




ReduceLROnPlateau

 

모델의 성능이 향상되지 않는 경우 Learning Rate를 낮추는 콜백함수입니다.

 www.tensorflow.org/api_docs/python/tf/keras/callbacks/ReduceLROnPlateau 

 

 

인자 설명
monitor 콜백함수에서 Learning Rate를 낮출때 기준이 되는 값을 지정합니다. 
loss, val_loss, accuracy, val_accuracy등을 지정할 수 있습니다. 

보통 Model.compile 메소드에 지정한 metrics과 관련된 것으로 지정합니다. 
factor 기준을 만족할때 마다 Learning rate를 얼마큼 감소시킬지 정하는 값입니다. 
기존의 Learning rate에 여기에 지정된 값을 곱하여 새로운 Learning rate로 사용합니다. 

new_lr = lr * factor
patience monitor에 지정된 값이 patience에서 지정한 횟수만큼 epoch를 진행했는데도 개선되지 않았다면 Learning Rate를 낮추도록 합니다. 
verbose 1로 지정하면  Learning Rate 낮춰질 때마다 메시지가 출력되며 0으로 지정하면 아무 메시지도 출력되지 않습니다. 
mode monitor가 accuracy 또는 val_accuracy로 지정된 경우에는 max로 해야 합니다. 이전 값보다 커지지 않은 경우에  Learning Rate를 낮추도록 합니다. 

monitor가 loss 또는 val_loss로 지정된 경우에는 min으로 해야 합니다. 이전 값보다 작아지지 않은 경우에  Learning Rate를 낮추도록 합니다.  

auto의 경우에는 monitor에 지정된 것을 보고 알아서 판단하여  Learning Rate를 낮추도록 합니다. 
min_delta min_delta에서 지정한 값만큼 monitor에서 지정한 값이 변했어야 mode에서 지정한 방향으로 값이 변한 것으로 간주하여  Learning Rate를 낮추도록 합니다. 
cooldown ReduceLROnPlateau 콜백함수에 의해서 Learning rate가 낮춰진 후 다시    ReduceLROnPlateau 콜백함수가 정상 동작하기 전까지 대기할 epoch 수입니다.
min_lr min_lr에서 지정한 값보다 Learning rate가 낮아지지 않도록 합니다. 




EarlyStopping

 

모델 성능 향상이 없는 경우 학습을 중지하도록 하는 콜백함수입니다.  

www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping 

 

 

 

인자 설명
monitor 콜백함수에서 EarlyStopping 적용할지 여부를 결정할 때 기준이 되는 값을 지정합니다. 
loss, val_loss, accuracy, val_accuracy등을 지정할 수 있습니다. 

보통 Model.compile 메소드에 지정한 metrics과 관련된 것으로 지정합니다. 
min_delta min_delta에서 지정한 값만큼 monitor에서 지정한 값이 변했어야 mode에서 지정한 방향으로 값이 변한 것으로 간주하여 학습을 중단합니다. 
patience monitor에 지정된 값이 patience에서 지정한 횟수만큼 epoch를 진행했는데도 개선되지 않았다면   학습을 중단합니다.  
verbose 1로 지정하면   학습이 중단될 때 메시지가 출력되며 0으로 지정하면 아무 메시지도 출력되지 않습니다. 
mode monitor가 accuracy 또는 val_accuracy로 지정된 경우에는 max로 해야 합니다. 이전 값보다 커지지 않은 경우에  학습을 중단합니다.   

monitor가 loss 또는 val_loss로 지정된 경우에는 min으로 해야 합니다. 이전 값보다 작아지지 않은 경우에  학습을 중단합니다.   

auto의 경우에는 monitor에 지정된 것을 보고 알아서 판단하여   학습을 중단합니다. 
baseline monitor에 지정된 값이 baseline에 지정된 값보다 개선되지 않으면  학습을 중단합니다. 
restore_best_weights True이면 학습하는 동안 모니터링된 값중 가장 좋았을 때의 모델 가중치로 복원됩니다.  

False이면 학습 종료 후의 모델 가중치가 사용됩니다.

baseline에 지정된 값과 관계없이 성능 좋았던 모델 가중치로 복원됩니다.
baseline에서 지정한 값보다 개선되지 않았다면 patience만큼 epoch를 더 수행한 후, 그 중에 가장 좋은 가중치로 복원합니다. 




문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts