Early Stopping은 기계 학습과 딥 러닝 모델의 과적합을
방지하기 위한 정규화 기법 중 하나
모델의 학습을 중지함으로써 과적합을 방지하고,
검증 데이터를 사용하여 모델의 일반화 능력을 평가하여
더 신뢰성 있는 모델을 얻을 수 있도록 도와 준다.
학습이 진행될 수록 weight가 업데이트되면서 train data를
잘 설명하는 fitting된 boundary를 긋게 된다.
그러나 지나치게 학습을 오래하면 경계면이 너무 복잡해 지면서
overfitting이 발행할 수 있으므로 적당한 순간에 학습을
종료해야 한다.
학습 데이터(training data)를 사용하여 모델을 학습하고,
검증 데이터(validation data)를 사용하여 모델의 성능을 평가
일반적으로 데이터를 학습 세트와 검증 세트로 나누는데,
학습 세트로 모델을 학습하고 검증 세트로 모델의 성능을
평가한다
학습 중에 정기적으로 검증 세트에서 모델의 성능을 평가
이 평가는 정기적인 간격(에포크 단위)으로 수행된다
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])
학습 중간에 서버의 사정이나 어떤 이유로 학습이 종료될 수 있다
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/')
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])
학습 중간에 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