Call back 함수

이주현·2023년 12월 24일

딥러닝

목록 보기
6/11

Early Stopping ?

  • Early Stopping은 기계 학습과 딥 러닝 모델의 과적합을
    방지하기 위한 정규화 기법 중 하나

  • 모델의 학습을 중지함으로써 과적합을 방지하고,
    검증 데이터를 사용하여 모델의 일반화 능력을 평가하여
    더 신뢰성 있는 모델을 얻을 수 있도록 도와 준다.

  • 학습이 진행될 수록 weight가 업데이트되면서 train data를
    잘 설명하는 fitting된 boundary를 긋게 된다.

    그러나 지나치게 학습을 오래하면 경계면이 너무 복잡해 지면서
    overfitting이 발행할 수 있으므로 적당한 순간에 학습을
    종료해야 한다.

Early Stopping 동작 방식

1. 학습과 검증 데이터 분할

  • 학습 데이터(training data)를 사용하여 모델을 학습하고,
    검증 데이터(validation data)를 사용하여 모델의 성능을 평가

  • 일반적으로 데이터를 학습 세트와 검증 세트로 나누는데,
    학습 세트로 모델을 학습하고 검증 세트로 모델의 성능을
    평가한다

2. 정기적인 모델 평가

  • 학습 중에 정기적으로 검증 세트에서 모델의 성능을 평가

  • 이 평가는 정기적인 간격(에포크 단위)으로 수행된다

3. 얼리 스톱핑 조건

  • 검증 세트에서 모델의 성능이 특정 기준을 충족하지 못하면
    (예 : 검증 손실(validation loss)이 더이상 감소하지 않거나 증가하는 경우),
    학습을 중지하고 가장 좋은 성능을 보인 모델을 선택한다

4. 모델 선택

  • 얼리 스톱핑을 통해 선택된 모델은 일반적으로 검증 세트에서 가장 좋은 성능을 나타내는 모델이다

Early stopping 사용 방법

  • validation 체크해서 나빠지는 순간(overfitting)에 종료
  • 복붙해서 사용하기
es = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss', patience = 3) 
#복붙하면됨~

from keras.api._v2.keras import callbacks
history = model.fit(train_images, train_labels,
                    epochs = 100,
                    validation_split=0.2,
                    batch_size = 512,
                    callbacks = [es])

모델 저장- Model checkpoint

  • 학습 중간에 서버의 사정이나 어떤 이유로 학습이 종료될 수 있다

  • checkpoint는 학습 중간에 저장(백업)을 지정된 경로에 수행한다.

  • 학습이 정상적으로 완료 되었거나 비정상적으로
    종료되었을 때에도 저장된 모델을 불러와서
    사용하거나 추가 학습을 할 수 있다.

사용법

cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath='/content/cp_dir',
                                                 save_weights_only=True,
                                                 #모델의 구조는 저장하지 않고 모델의 weight만 저장
                                                 verbose=1)

history = model.fit(train_images,train_labels,epochs= 100,validation_split=0.2,batch_size = 512,callbacks = [es, cp_callback])
                    
                    
model.load_weight('/contents/')

Learning_rage Scheduler

  • 학습의 속도와 최적화를 위해 lr를 학습 중에 변경해준다.
  • 학습이 진행됨에 따라 lr 낮춘다 -> lr decay

사용법

reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.2,patience=1, min_lr=0.0001)

history = model.fit(train_images, train_labels,
                    epochs = 100,
                    validation_split=0.2,
                    batch_size = 512,
                    callbacks = [es, cp_callback, reduce_lr])
                    

직접 만들어 사용

def scheduler(epoch, lr):
    if epoch < 3:
        return lr
    else:
        return lr * 0.1
        
lr_schedule = tf.keras.callbacks.LearningRateScheduler(scheduler, verbose=0)

history = model.fit(train_images, train_labels,
                    epochs = 100,
                    validation_split=0.2,
                    batch_size = 512,
                    callbacks = [es, cp_callback, lr_schedule])
                    

Traing state monitoring(Tensorboard)

  • 학습 중간에 loss나 metric의 변화를 실시간으로 확인

  • weight들의 변화도 확인

  • 텐서보드를 서버에 export 하면 url 접속하면
    웹에서 텐서보드를 확인 할 수 있다

%load_ext tensorboard

model_name = '_ver03'

log_dir = "logs/fit/" + model_name
board = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1) # epoch마다 히스토그램 계산

history = model.fit(train_images, train_labels,
                    epochs = 100,
                    batch_size = 512,
                    callbacks = [es, cp_callback, board, lr_schedule])
                    
                    
%tensorboard --logdir logs/fit
profile
Backend Delveloper

0개의 댓글