본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day8] Pytorch 6. 모델 불러오기 : model.save(), load, checkpoint, freeze, transfer learning

최근 finetuning을 많이 하기 때문에

다른 사람이 만든 모델을 불러오고 사용하는 방법을 알아보자

 

학습 결과에 대한 모델과 파라미터 저장

학습의 결과를 저장해주는 함수이다.

모델의 architecture 와 parameter를 저장한다.

또한 중간과정을 저장해서 나중에 최선의 결과인 모델을 선택할 수 있다

 

  • model.state_dict() : 모델의 파라미터 표시
  • torch.save(model.state_dict()) : 모델의 파라미터 저장
    model.pt 라는 pd파일로 저장
  • load_state_dict() : 파라미터만 load
  • torch.save() : 모델의 architecture와 파라미터가 함께 저장
  • torch.load() : 모델의 architecture와 파라미터가 함께 load
from torchsummary import summary
summary(model, size)

이런 식으로 torchsummary를 사용하면 layer마다 output shape과 parameter갯수를 한 눈에 볼 수 있도록 출력해준다

 

checkpoints

학습의 중간 결과를 저장하여 후에 최선의 결과를 선택할 수 있도록 함

  • earlystopping 기법 사용시 이전 학습의 결과물을 저장해서 이전 epoch의 학습 상태를 가져올 수 있다
  • loss와 metric, epoch를 함꼐 저장한다
savefile=torch.save({넣을 정보 선택})

#이제 나중에 불러낼 때
checkpoint=torch.load(savefile)
epoch=checkpoint['epoch']
optimizer.load_state_dict()
#model architecture과 loss 등을 더 불러내내면 다시 복원할 수 있다

 

Transfer learning 전이 학습

다른 dataset으로 만든 모델을 현재 데이터에 적용하는 방법

  • 대용량 데이터로 학습된 모델은 성능이 좋기 때문에 적은 데이터를 가진 모델에 적용시킨다
  • 현재 딥러닝에서는 가장 일반적인 학습 기법이다
  • torchvision의 다양한 모델, huggingface

Freezing

pretrained model을 활용할 때, 모델의 일부분(처음이나 끝)을 얼려서 더 이상 파라미터가 업데이트가 되지 않고 새로 학습을 시키는 것

back-propagation이 일부 layer에서만 일어난다.

 

stepping frozen : 얼릴 부분을 계속 바꾸어가며 학습해보는 것 

for param in my_model.parameters():
    param.requres_grad=False #frozen
for param in my_model.linear_layers.parameters():
    param.requres_grad=True #마지막 레이어