[U] Week 2 - Model Loading

JaeJun Lee ·2022년 9월 29일
0

부스트캠프 AI Tech

목록 보기
13/30

모델 훈련 시 예외상황을 방지하거나 최선의 결과를 보존하기 위해 중간중간 혹은 종료된 뒤 학습 결과를 저장 및 로드할 필요가 있다.

model.save() & load()

학습의 결과를 저장하기 위한 함수

  • 모델 형태(architecture)와 파라미터를 저장
  • 모델 학습 중간 과정의 저장을 통해 최선의 결과모델을 선택
  • 만들어진 모델을 외부 연구자와 공유하여 학습 재연성 향상
# 모델의 파라미터 저장 및 로드
import torch
import os

torch.save(model.state_dict(), os.path.join(MODEL_PATH, "model.pt"))

new_model = TheModelClass()
new_model.load_state_dict(torch.load(os.path.join(MODEL_PATH, "model.pt)))

# 모델의 architecture와 함께 저장 및 로드
torch.save(model, os.path.join(MODEL_PATH, "model.pt"))
model = torch.load(os.path.join(MODEL_PATH, "model.pt"))

checkpoints

학습의 중간 결과를 저장하여 최선의 결과를 선택

  • earlystopping 기법 사용 시 이전 학습의 결과물을 저장
  • loss와 metric 값을 지속적으로 확인 저장
  • 일반적으로 epoch, loss, metric을 함꼐 저장하여 확인
torch.save({
	'epoch': epoch,
    'model_state_dcit': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'loss': loss,
}, f"{checkpoint_path}".pt)

checkpoint = torch.load(f"{checkpoint_path}")
model.load_state_dict(checkpoint['model_state_dict])
optimizer.load_state_dict(checkpoint['optimizer_state_dict])
epoch = checkpoint['epoch']
loss = checkpoint['loss']

Transfer learning

문제를 해결하기 위해 모델을 학습할 때 정제된 충분한 데이터를 얻기는 힘드므로 지식 전이를 통해 적은 데이터로도 좋은 모델을 만드는 방법론이다.

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
  • 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 높다
  • 현재의 DL에서는 가장 일반적인 학습 기법
  • backbone architecture가 잘 학습된 모델에서 일부부만 변경하여 학습을 수행
  • pretrained model을 활용 시 모델의 일부분을 frozen 시키는 데 이때 backpropagation은 fronzen 레이어 전까지 진행.

이때 레이어 frozen 및 pretrain weight를 활용하는 것은 사용하려는 데이터와 학습되어있는 모델에서 사용한 대용량 데이터가 유사할 경우 학습된 모델을 사용해 현재 데이터에 적용할 수 있을 것 같다.

0개의 댓글