Tensorflow

Tensorflow 콜백함수: ReduceLROnPlateau

카카오그래놀라 2020. 11. 18. 13:10

 

tf.keras.callbacks.ReduceLROnPlateau

 

Tensorflow, 케라스 콜백함수
ReduceLROnPlateau

모델의 개선이 없을 경우, Learning Rate를 조절해 모델의 개선을 유도하는 콜백함수입니다.

 

www.tensorflow.org/api_docs/python/tf/keras/callbacks/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
)
# Example

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
                              patience=5, min_lr=0.001)
model.fit(X_train, Y_train, callbacks=[reduce_lr])

 

 

인자 설명

인자 설명
monitor ReduceLROnPlateau의 기준이 되는 값을 입력합니다.

만약 'val_loss'를 입력하면 val_loss가 더이상 감소되지 않을 경우 ReduceLROnPlateau을 적용합니다.
이외에도 다양한 값을 입력할 수 있습니다.

factor Learning rate를 얼마나 감소시킬 지 정하는 인자값입니다.

새로운 learning rate는 기존 learning rate * factor입니다.
예를 들어 현재 lr이 0.01이고 factor가 0.8일 때, 콜백함수가 실행된다면 그 다음 lr은 0.008이 됩니다.
또다른 예로 현재 lr이 0.3이고 factor가 0.1일 때, 콜백함수가 실행된다면 그 다음 lr은 0.03이 됩니다. 

patience Training이 진행됨에도 더이상 monitor되는 값의 개선이 없을 경우, 최적의 monitor 값을 기준으로 몇 번의 epoch을 진행하고, learning rate를 조절할 지의 값입니다. 예시를 통해 이해하는 게 더 좋을 것 같습니다.

예를 들어 patience는 3이고, 30에폭에 정확도가 99%였을 때,
만약 31번째에 정확도 98%, 32번째에 98.5%, 33번째에 98%라면 모델의 개선이 (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.8532라고 할 때,
만약 31에폭에 정확도가 0.8537라고 하면 이는 0.005의 개선이 있었지만 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이 됩니다.

 

 

간단한 사용 예시는 아래 링크를 참조해주세요!

텐서플로우 콜백 함수(tensorflow callback)

 

텐서플로우 콜백 함수(tensorflow callback)

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..

deep-deep-deep.tistory.com