Callback 함수

nauna·2021년 9월 17일
0

딥러닝 입문

목록 보기
8/9

모델에 저장할 것
1. model의 구조
2. model의 parameter

model 저장

  • model 전체 저장
    model.save('~~.h5')
    model 불러오기
    load_model('~~.h5')

  • model 구조 저장
    json_string=model.to_json()
    model 불러오기
    model_json=model_from_json(json_string)

  • model weight만 저장
    new_model.save_weights('my_model_weights.h5')

Callback

ModelCheckpoint

모델 저장할 때 사용되는 콜백함수
1. ModelCheckpoint callback 만들기

from tensorflow.keras.callbacks import ModelCheckpoint

cp_callback = ModelCheckpoint(filepath, save_weights_only=True, ...)
  1. fit의 callbacks에 내가 만든 callback 넣고 train
model = create_model()
model.fit( ..., callbacks=[cp_callback])
#이름을 epoch마다 바꿔야 함
checkpoint_path="training_2/cp-{epoch:04d}.ckpt" 
checkpoint_dir=os.path.dirname(checkpoint_path)
  1. checkpoint의 weight 불러오기
#4번째 epoch이 저장된 걸 쓰고 싶다면
model.load_weights('./traing_3/cp-0004.ckpt') 
loss, acc=model.evaluate(x_test, y_test, verbose=2)

Early Stopping

  • seed 값 고정하는 함수
def seed_everything(seed: int=42):
    random.seed(seed)
    np.random.seed(seed)
    os.environ["PYTHONHASHSEED"]=str(seed)
    tf.random.set_seed(seed)
seed_everything()
  • callback 만들기
from tensorflow.keras.callbacks import EarlyStopping
EarlyStopping(monitor='val_loss', patience=2, verbose=1) #monitor: early stopping을 결정하는 기준 #patience=2: 2번 연속 val_loss가 증가하면 train 중지

Learning Rate Scheduler

  • epoch의 값에 따라 learning rate가 변하는 함수를 만들기
#epoch<5일 때는 원래 learning rate 유지 / 그 이후에는 조금씩 줄여나감
def my_schedule(epoch, learning_rate=lr):
    if epoch < 5:
        return lr 
    else:
        return float(lr * tf.math.exp(0.1 * (5- epoch)))

from tensorflow.keras.callbacks import LearningRateScheduler
LearningRateScheduler(my_schedule, verbose=1)
  • 이미 tensorflow에 정의되어있는 scheduler 사용 가능
    ex) CosineDecay, ExponentialDecay

ReduceLRonPlateau

  • 학습 시 개선이 별로 없는 구간(완만한 구간)에서 learning rate 줄이기
from tensorflow.keras.callbacks import ReduceLROnPlateau

#val_loss가 2번 연속 증가하면 learning rate 감소시킴
ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=2, verbose=1)

HyperParameter 정리

  • Model
    layer의 개수, unit의 개수
  • Optimization
    optimizer: adam이 대부분 좋음
    learning rate(보통 1e-2부터 시작), L2 coefficients(1e-5~1e5 / 높일수록 overfitting을 줄일 수 있음), dropout rate(높일수록 학습을 단순하게 진행할 수 있음), batch size(클수록 train 속도 빠름), epoch(early stopping 활용)

0개의 댓글