Tensorflow로 모델을 학습할 때 특정 이벤트가 발생할 때 실행되는 함수들이다.
이를 통해 학습 동안 다양한 작업을 수행하거나 제어할 수 있다.
ModelCheckpoint
tf.keras.callbacks.ModelCheckpoint
epoch 마다 모델의 가중치를 저장하는 콜백이다.
학습 중에 모델의 성능이 개선될 때마다 모델의 가중치를 저장하여 최상의 모델을 추출할 수 있다.
-매개변수-
- filepath : 문자열. 모델 가중치를 저장할 파일 경로이다. 파일 이름에는 epoch와 val_loss (또는 다른 지표)와 같은 템플릿 인수를 사용할 수 있다.
- monitor : 모니터링할 지표를 지정한다. 기본값은 val_loss이다.
- verbose : 얼마나 자세하게 정보를 표시할지를 제어한다. 0, 1 또는 2로 설정할 수 있으며, 기본값은 0이다.
- save_best_only : 가장 좋은 성능을 보인 가중치만 저장하려면 True로 설정한다. 기본값은 False이다.
- save_weights_only : 가중치만 저장하려면 True로 설정한다. False(기본값)으로 설정하면 모델 구조와 가중치를 모두 저장한다.
- mode : 모니터링할 지표의 최소화 또는 최대화를 제어한다. 'auto(기본값)', 'min' 또는 'max' 중 하나로 설정할 수 있다.
- save_freq : 가중치를 저장할 빈도를 지정한다. 'epoch(기본값)' 또는 정수를 입력할 수 있다. 'epoch'로 설정하면 각 에포크가 끝날 때마다 가중치를 저장한다. 정수로 설정하면 해당 빈도로 가중치를 저장한다.
from tensorflow.keras.callbacks import ModelCheckpoint
dir1 = 'checkpoint/'+ datetime.datetime.now().strftime("%Y%m%d-%H%M%S")+"/loss_weight.h5"
dir2 = 'checkpoint/'+ datetime.datetime.now().strftime("%Y%m%d-%H%M%S")+"/val_loss_weight.h5"
# 콜백 정의
chpt_loss = ModelCheckpoint(filepath=dir1, monitor='loss',verbose=1, save_best_only=True)
chpt_val_loss = ModelCheckpoint(filepath=dir2, monitor='val_loss',verbose=1, save_best_only=True)
Early stopping
tf.keras.callbacks.EarlyStopping
훈련 도중 모델의 성능이 개선되지 않을 때 조기 종료하는 역할
-매개변수-
- monitor : 학습 조기종료를 위해 관찰하는 값(vall_loss, val_accuracy)
- min_delta : 개선되고 있다고 판단하기 위한 최소 변화량, 변화량이 적은경우 개선이 없다고 판단
- patience : 개선이 안된다고 바로 종료하지 않고, 설정한 epoch 수만큼 기다림
- mode : 관찰항목에 대해 개선이 없다고 판단하기 위한 기준
- val_loss : 감소되지 않을 때 종료해야 하므로 min
- val_accuracy : 증가되지 않을 때 종료해야 하므로 max
- auto는 monitor 값에 따라 자동으로 설정(기본값)
from tensorflow.keras.callbacks import EarlyStopping
# 콜백 정의
ely_stop = EarlyStopping(monitor='val_loss', patience=4)
ReduceLROnPlateau
tf.keras.callbacks.ReduceLROnPlateau
훈련 도중 val_loss가 개선되지 않을 때 학습률을 동적으로 조정하여 학습을 최적화하는 역할을 한다.
-매개변수-
- monitor: 모니터링할 지표. (기본값은 'val_loss')
- factor: 학습률을 얼마나 감소시킬 것인지를 결정하는 인수.(기본값은 0.1) 예를 들어, factor가 0.5이면, 검증 손실이 개선되지 않을 때 학습률이 절반으로 줄어든다.
- patience: 검증 손실이 개선되지 않았을 때, 얼마나 많은 epoch를 기다릴 것인지를 결정하는 인수. (기본값은 10) 예를 들어, patience가 5이면, 검증 손실이 5 epoch 동안 개선되지 않으면 학습률을 감소시킨다.
- mode: 모니터링 지표의 개선 여부를 어떻게 판단할 것인지를 결정하는 인수. (기본값은 'auto') 'min', 'max', 또는 'auto' 중 하나의 값을 사용할 수 있다. 'min'인 경우 모니터링 지표가 감소할 때 개선되었다고 판단, 'max'인 경우 모니터링 지표가 증가할 때 개선되었다고 판단, 'auto'인 경우 monitor 매개변수에 따라 적절한 모드가 자동으로 선택된다.
- min_delta: 개선된 것으로 판단되기 위한 최소한의 변화량을 결정하는 인수. (기본값은 1e-4) 예를 들어, min_delta가 0.5이면, 모니터링 지표가 0.5보다 적게 개선되면 개선된 것으로 판단하지 않는다.
- cooldown: 학습률을 감소시킨 이후 다시 학습을 재개하기까지 기다리는 epoch 수. (기본값은 0)
- min_lr: 학습률의 하한을 결정하는 인수.(기본값은 1e-7)학습률이 min_lr보다 작아지면 학습이 중단된다.
from tensorflow.keras.callbacks import ReduceLROnPlateau
# 콜백 정의
reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=2, factor=0.2)
LearningRateScheduler
tf.keras.callbacks.LearningRateScheduler
훈련 도중 학습률을 동적으로 조정하는 역할, 사용자 정의된 학습률 스케줄링 함수를 제공하여 학습률을 조정한다.
ex. 매 epoch 마다 0.1씩 감소하는 함수를 적용
from tensorflow.keras.callbacks import LearningRateScheduler
# 학습률 조정 함수 정의
def lr_scheduler(epoch):
if epoch < 10:
return 0.001
else:
return 0.0001
# 콜백 정의
lr_schedule = LearningRateScheduler(lr_scheduler)
TensorBoard
tf.keras.callbacks.TensorBoard
훈련 도중 로그를 기록하여 시각화 할 수 있는 역할
-매개변수-
- log_dir : 로그 파일이 저장될 디렉토리 경로 지정
- histogram_freq : 히스토그램을 얼마나 자주 기록할지 설정, 0이상의 값일 경우 해당 주기마다 히스토그램 기록
- write_graph : 그래프를 기록할지 여부 결정(True가 기본값)
- write_images : 모델의 가중치를 이미지로 기록할지 여부 결정(False가 기본값)
- update_freq : 로그를 업데이트할 주기를 설정, 'batch(매 배치마다)', 'epoch(매 에포크마다)', 또는 정수 값
- profile_batch : 프로파일링을 위해 기록할 배치 범위 지정, 정수 값입력, 첫번째 배치부터 지정한 배치까지의 프로파일링 결과를 기록(None이 기본값)
from tensorflow.keras.callbacks import TensorBoard
log_dir = "logs/my_board/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
# 콜백 정의
tensorboard = TensorBoard(log_dir=log_dir,histogram_freq=1,write_graph=True,write_images=True,update_freq='epoch',profile_batch=10)
CSVLogger
tf.keras.callbacks.CSVLogger
훈련 도중 로그를 CSV 파일로 기록하는 역할, 매 Epoch 마다 지정된 CSV 파일에 loss, metrics를 기록한다.
-매개변수-
- filename : 로그를 저장할 CSV 파일 경로
- separator : CSV 파일에서 각 열을 구분하는 문자를 지정(,가 기본값)
- append : 기존 파일에 로그를 추가할지 여부를 결정(False가 기본값, 기존 파일을 덮어쓴다.)
from tensorflow.keras.callbacks import CSVLogger
log = "logs" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")+"/training.log"
# 콜백 정의
csv_logger_callback = CSVLogger(log)
이렇게 선언한 callback들은 fit 함수에서 사용할 수 있다.
history = model.fit(
x_train,y_train,
validation_data=[x_val,y_val],
epochs=100,
batch_size = 128,
callbacks = [chpt_loss,chpt_val_loss,ely_stop,reduce_lr,lr_schedule,tensorboard,csv_log ]
)
callbacks.ipynb
Colaboratory notebook
colab.research.google.com
'AI > AI 라이브러리' 카테고리의 다른 글
[Tensorflow] 전이학습(Transfer Learning) (0) | 2024.01.14 |
---|---|
[Tensorflow] Optimizer / Loss Function / Metric (0) | 2024.01.11 |
[Tensorflow] 모델 컴파일, 학습, 예측 (0) | 2024.01.09 |
[Tensorflow] 모델 만들기 (0) | 2024.01.09 |
[Tensorflow] Tensorflow 입문 (0) | 2024.01.08 |