데이터과학 삼학년

tf.keras.callbacks.LearningRateScheduler 본문

Machine Learning

tf.keras.callbacks.LearningRateScheduler

Dan-k 2020. 6. 24. 18:17
반응형

딥러닝에서 가장 튜닝하기 까다로운(?) 하이퍼 파라미터 중 하나는 learning rate 이다.

 

Train 단계에서

learning rate를 직접 설정하기 보다 epoch의 정도나 epoch의 조건에 따라 learning rate를 자동으로 조절하여 학습시킬 수 있는 방법이 있다.

 

기본적으로 적용방법은 아래와 같이 만들어 model.fit의 callback에 넣어주면 된다.

tf.keras.callbacks.LearningRateScheduler(
    schedule, verbose=0
)

예시

 lr_decay_cb = tf.keras.callbacks.LearningRateScheduler(
        lambda epoch: args.learning_rate + 0.02 * (0.5 ** (1 + epoch)),
        verbose=True)

    # Setup TensorBoard callback.
    tensorboard_cb = tf.keras.callbacks.TensorBoard(
        os.path.join(args.job_dir, 'keras_tensorboard'),
        histogram_freq=1)

    # Train model
    keras_model.fit(
        training_dataset,
        steps_per_epoch=int(num_train_examples / args.batch_size),
        epochs=args.num_epochs,
        validation_data=validation_dataset,
        validation_steps=1,
        verbose=1,
        callbacks=[EarlyStopping(patience=args.patience), lr_decay_cb, tensorboard_cb])

 

아래 예시는 epoch 10까지는 learning rate 0.001 로 유지하다가 그 이후 점차적으로 learing rate을 줄이는 방법을 적용한 것이다.

# This function keeps the learning rate at 0.001 for the first ten epochs
# and decreases it exponentially after that.
def scheduler(epoch):
  if epoch < 10:
    return 0.001
  else:
    return 0.001 * tf.math.exp(0.1 * (10 - epoch))

callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
model.fit(data, labels, epochs=100, callbacks=[callback],
          validation_data=(val_data, val_labels))

 

아래 예시는 기본적으로 사용자가 설정한 learning rate을 유지하되, 설정한 epoch 이 작다면 사용자가 설정한 learning rate보다 좀 더 작게 설정하는 방법이다.

 lr_decay_cb = tf.keras.callbacks.LearningRateScheduler(
        lambda epoch: args.learning_rate + 0.02 * (0.5 ** (1 + epoch)),
        verbose=True)

tf.keras.callbacks.LearningRateScheduler

 

 

728x90
반응형
LIST
Comments