728x90

 Keras의 callback

: training 단계에서(epoch 시작부터 끝까지) 어떠한 동작을 수행하는 object

- callback들을 통해서 tensorboard에 모든 batch of training들에 대해 metric 수치를 모니터링할 수도 있고, 이를 저장하는 것도 가능

- Early Stop이나 Learning Rate Scheduling과 같은 기능을 통해 학습결과에 따라 학습을 멈추거나 학습률을 조정할수도 있음

=> 이처럼 Callback들을 잘 활용한다면, 딥러닝 학습의 결과를 보다 좋게 만들 수 있음.

 

주요 활용되는 callbacks

  1. ModelCheckpoint:
    • 기능: 모델의 훈련 중에 지정된 에포크마다 모델의 가중치를 저장.
    • 특징: 훈련 중간에 모델의 상태를 저장하여 최상의 성능을 보이는 모델을 선택할 수 있도록 도와줌. 이후 모델 재사용 또는 재훈련에 유용.
    • 아래 코드 참조
  2. EarlyStopping:
    • 기능: 모델의 훈련 중에 지정된 지표(monitor)를 모니터링하여 성능이 향상되지 않을 경우, 훈련을 조기 종료시킴.
    • 특징: 오버피팅을 방지하고 불필요한 계산을 줄여줌. 훈련 속도를 개선하고 최적의 성능을 달성할 수 있음.
  3. ReduceLROnPlateau:
    • 기능: 모델의 훈련 중에 지정된 지표(monitor)를 모니터링하고, 성능 개선이 없을 경우 학습률(learning rate)을 감소시킴.
    • 특징: 학습률을 동적으로 조정하여 학습 과정을 안정화하고, 최적의 학습률을 찾아주는 역할을 수행.
  4. TensorBoard:
    • 기능: 모델의 훈련 과정과 성능 지표를 시각화하기 위해 TensorBoard 로그를 생성.
    • 특징: 훈련과정을 시각화하여 모델의 동작을 이해하고 모델의 성능을 모니터링할 수 있도록 도와줌.
  5. LearningRateScheduler:
    • 기능: 지정된 학습률 스케줄링 함수를 사용하여 학습률을 동적으로 조정.
    • 특징: 학습률을 조정하여 학습 과정을 안정화하고 최적의 학습 속도를 찾아주는 역할. ReduceLROnPlateau와 유사하지만 더 많은 커스터마이징이 가능.
    • 아래 코드 참조

- Model Checkpoint with 코드!

tf.keras.callbacks.ModelCheckpoint(
    filepath,
    monitor: str = "val_loss",
    verbose: int = 0,
    save_best_only: bool = False,
    save_weights_only: bool = False,
    mode: str = "auto",
    save_freq="epoch",
    options=None,
    initial_value_threshold=None,
    **kwargs
)

 

- Keras에서 제공하는 LearningRateScheduler with 코드!!

=> 얘는 도대체 무슨 기능을 하는지 헷갈려서.. 알아봄

import tensorflow as tf

def lr_scheduler(epoch, lr):
    if epoch % 30 == 0 and epoch != 0:
        lr = lr * 0.1
    return lr

# LearningRateScheduler 콜백 함수 생성
scheduler = tf.keras.callbacks.LearningRateScheduler(lr_scheduler)

# 모델 컴파일
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 콜백 함수 등록하여 모델 훈련
model.fit(x_train, y_train, epochs=100, callbacks=[scheduler])

예제에서 lr_scheduler 함수는 현재 에포크를 확인하여 에포크가 30 배수일 때마다 학습률을 0.1 감소시킴

- 이렇게 하면 모델은 훈련 중간에 학습률을 조정하여 나은 성능을 얻을 있음.

- 이같이 Keras의 LearningRateScheduler는 사용자의 필요에 따라 학습률을 동적으로 스케줄링하여 함수를 원하는대로 정의할 수 있음

- callback함수의 일종이므로, callbacks 리스트에 append해주어야 함! :)

 

 

reference: https://rinha7.github.io/keras-callbacks/

https://keras.io/api/callbacks/base_callback/

 

728x90

+ Recent posts