train 단계에서 learning rate 를 직접 설정하기 보다 epoch의 조건에 따라 learning rate 를 자동으로 조절하여 학습시킬 수 있는 방법
Learning rate scheduler - lr changes at the beginning of current epoch
ReduceLROnPlateau - lr changes at the end of previous epoch
def scheduler(epoch):
if epoch<10:
return 0.001
else:
return 0.001 * tf.math.exp(0.1 *(10-epoch))
callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
model.fit(data,labels,epochs=100, callbacks=[callback],
validation_data=val_data, val_labels))
#epoch10까지는 learning rate를 0.001까지로 유지하다가 그 이후 점차적으로 learnig rate를
#줄이는 방법을 적용한 예시이다.
lr_decay_cb = tf.keras.callbacks.LearningRateScheduler(
lamda epoch: args.learning_rate + 0.02 *(0.5 **(1+epoch)),
verbose = True)
# 기본적으로 사용자가 설정한 learning rate 를 유지하되 설정한 epoch가 작다면 사용자가 설정한
# learning rate 보다 더 작게 설정하는 방법이다.
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
)
tf.keras.callbacks.LearningRateScheduler
https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ReduceLROnPlateau
tf.keras.callbacks.LearningRateScheduler(
schedule, verbose=0
)
#schedule은 함수이다 내가 짜줘야하는 것
Uploaded by Notion2Tistory v1.1.0