[BoostCamp AI Tech / Day 13, PytTorch] (06강) 모델 불러오기

newbie·2021년 8월 21일
0

강의 소개

이번 강의에선 PyTorch 모델 저장 및 불러오는 방법과 이어 학습하기(Transfer Learning)를 학습합니다. state_dict의 의미와 모델의 파라미터를 여러 정보들과 함께 저장하고 불러오는 법을 배우고 전에 학습되어 있는 모델을 활용하는 법을 배웁니다.

본 강의에서 배운 것을 통해 Loss와 Metric에 따라 모델을 저장하고, 이어학습하기, 더 나아가 public site에 있는 학습해둔 모델 활용법까지 익힙니다.

즉, 다른 데이터에 pre-trained된 backbone model을 가져와서 현재 데이터셋에 적합하게 fine-tuning을 위한 강의 영상 정리!!


model.save()

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

  • 모델 형태(architecture)와 파라미터를 저장

  • 모델 학습 중간 과정의 저장을 통해 최선의 결과 모델을 선택(early stopping)

  • model 파라미터 확인

    • model.state_dict()
  • model 파라미터 저장

    • torch.save(), ordereddict type으로 저장, pt 확장자
  • model 파라미터 로드 :

    • new_model = TheModelClass(), TheModelClass는 우리가 만든 model의 architecture
    • new_model.load_state_dict(), 같은 모델의 형태에서만 파라미터를 불러올 수 있음
  • model architecture와 함꼐 저장 및 load

    • torch.save(model()), torch.load(model()), python pickle 방식으로 저장
  • 일반적일 경우는 파라미터를 저장하고, architectur는 코드로 공유를 함

check points

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

  • earlystopping 기법 사용시 이전 학습의 결과물을 저장

  • loss와 metric 값을 지속적으로 확인 저장

  • 일반적으로 epoch, loss, metric을 함께 저장하여 확인

  • colab에서 지속적인 학습을 위해 필요

  • 저장 시 방법

pretrained model
transfer learning

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
  • 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 좋음
  • 현재의 DL에서는 가장 일반적인 학습 기법
  • backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행함.

NLP에서는 HuggingFace가 사실상 표준!!

Freezing

  • Pretrained model을 활용시 모델의 일부분을 frozen 시킴

  • Task A과 같은 backone architecture에서 마지막 3개의 layer를 제거하고, dense layer를 추가하는 등 현재 데이터를 위한 weight를 생성함

  • 여기서 기존 모델에서 특정 부분까지는 weight가 변하지 않게 조작하는데, 그것을 Freezing이라고 함.

  • 최근에는 stepping freosen이라고 하여, 기존 모델에 4개의 weight matrix가 있을 때, 한 개만 frozen 시키고 나머지 3개는 학습, 1개씩 모두 frozen이 되도록 반복하는 stepping frozen을 사용하기도 함.

  • freezing 하고자 하는 parameter에 대해, requires_grad = False로 바꿔주면 됨

profile
DL, NLP Engineer to be....

0개의 댓글