Tensorflow Keras의 ReduceLROnPlateau 콜백 함수는 모델의 성능에 개선이 없을 경우 Learning Rate를 조절해 모델의 개선을 유도하는 콜백함수이다.
경사하강법에 의하여 학습을 하는 경우 Local Minima에 빠져버리게 되면, 더이상 학습률이 개선되지 않고 정체되거나, 심하게 튀는 현상이 생길 수 있다. 이때 learning rate를 늘리거나 줄여주는 방법으로 빠져나오는 효과를 기대할 수 있다. 그 역할을 ReduceLROnPlateau이 해준다.
아래의 공식 페이지에서 사용방법을 확인할 수 있다.
문법
tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss', factor=0.1, patience=10, verbose=0,
mode='auto', min_delta=0.0001, cooldown=0, min_lr=0, **kwargs
)
인자 설명
인자 | 설명 |
monitor | ReduceLROnPlateau의 기준이 되는 값 만약 'val_loss'를 입력하면 val_loss가 더이상 감소되지 않을 경우 ReduceLROnPlateau을 적용한다. |
factor | Learning rate를 얼마나 감소시킬 지 정하는 인자값 새로운 learning rate는 기존 learning rate * factor 값이다. 예를 들어 현재 lr이 0.01이고 factor가 0.2일 때, 콜백함수가 실행된다면 그 다음 lr은 0.002이 된다. |
patience | Training이 진행됨에도 더이상 monitor되는 값의 개선이 없을 경우, 최적의 monitor 값을 기준으로 몇 번의 epoch을 진행하고, learning rate를 조절할 지를 나타내는 인자값 예를 들어 patience는 3이고, 30에폭에 정확도가 93%였을 때, 만약 31번째에 정확도 92%, 32번째에 91%, 33번째에 91%라면 모델의 개선이 (patience=3)동안 개선이 없었기에, ReduceLROnPlateau 콜백함수를 실행한다. |
verbose | 0 또는 1 1일 경우, EarlyStopping이 적용될 때, 화면에 적용되었다고 나타난다. 0일 경우, 화면에 나타냄 없이 종료한다. |
mode | "auto" 또는 "min" 또는 "max" monitor되는 값이 최소가 되어야 하는지, 최대가 되어야 하는지 알려주는 인자 예를 들어, monitor하는 값이 val_acc 즉 정확도일 경우, 값이 클수록 좋기때문에 "max"를 입력하고, val_loss일 경우 작을수록 좋기 때문에 "min"을 입력한다. "auto"는 모델이 알아서 판단한다. |
min_delta | 개선된 것으로 간주하기 위한 최소한의 변화량 예를 들어, min_delta가 0.01이고, 30에폭에 정확도가 0.853라고 할 때, 만약 31에폭에 정확도가 0.854라고 하면 이는 0.001의 개선이 있었지만 min_delta 값 0.01에는 미치지 못했으므로 개선된 것으로 보지 않는다. |
cooldown | Learning rate가 감소한 후, ReduceLROnPlateau 콜백함수를 다시 실행하기 전에 대기 할 Epoch 수 예를 들어, factor가 3이고, cooldown이 5일 때, 만약 ReduceLROnPlateau이 적용되어 learning rate가 감소되었다고 하자. 감소된 이후에도, 3에폭 연속 monitor 값의 개선이 없다고 해도, ReduceLROnPlateau는 실행되지 않는다. cooldown이 적용되고 있기 때문에 cooldown 값인 5 에폭 실행 후, 3번 연속 moniort 값의 개선이 없을 시, ReduceLROnPlateau이 다시 적용된다. |
min_lr | Learning rate의 하한선 예를 들어 현재 lr이 0.1이고 factor가 0.5이고, min_lr이 0.03이라면, 첫 번째로 콜백함수가 적용될 시, lr은 0.05(0.1*0.5)이 됩니다. 두 번째로 콜백함수가 적용된다면 0.025(0.1*0.5*0.5)이지만, min_lr이 0.03이기 때문에, 새로운 learning rate는 0.025가 아닌, 0.03이 된다. |
출처: https://deep-deep-deep.tistory.com/56 [딥딥딥]
'DL(Deep-Learning) > Tensorflow' 카테고리의 다른 글
[Error] tf.keras.models.load_model 에러 해결방법 (0) | 2022.01.30 |
---|---|
[TF Hub] 전이학습 Transfer Learning (0) | 2022.01.30 |
[TF Hub] 사전 훈련된 모델 사용하기 (0) | 2022.01.29 |
[Keras] callback 함수 - EarlyStopping (0) | 2022.01.25 |
[Mac M1] Tensorflow 설치 방법 (0) | 2022.01.24 |