[PyTorch] 6강 모델 불러오기

지구인 ㅣ 2022. 1. 27. 20:49

728x90

최근 딥러닝 경향

1. pre-trained 기본적인 모델 + 내 데이터에대해 추가 학습하는 fine-tuning하는 형태의 알고리즘이 대세

  • 이미지 기반의 CNN계열, Resnet 계열 발전에 따라 그렇게 됨
  • (NLP에선) transformer 기반 BERT의 등장에 따라 위와 같은 경향을 따르게 됨

-> 그러려면 모델을 불러와야하고, 이전에 먼저 모델에 대해 알아야!

 

2. model.save()

  • 학습 결과 저장하는 데 사용하는 함수
  • 모델 형태(architecture)와 파라미터 저장
  • 모델 학습 중간 과정의 저장(early stopping)을 통해 최선의 결과모델 선택
  • 모델 공유 가능
# Initialize model
model = TheModelClass()

# Initialize optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# Print model's state_dict
# state_dict : 모델의 파라미터 표시
print("Model's state_dict:")
for param_tensor in model.state_dict():
    print(param_tensor, "\t", model.state_dict()[param_tensor].size())

# Print optimizer's state_dict
print("Optimizer's state_dict:")
for var_name in optimizer.state_dict():
    print(var_name, "\t", optimizer.state_dict()[var_name])
    
# Save model : 모델의 파라미터 model.state_dict()을 PATH에 save
torch.save(model.state_dict(), PATH)

# Load model
model = TheModelClass(*args, **kwargs)  # 모델 객체 초기화
model.load_state_dict(torch.load(PATH))  # 같은 모델의 형태에서 파라미터만 load
model.eval()  # dropout, batch normalization layers을 설정하기 위함. 자세한 건 공식 문서 참고

# Save entire model
torch.save(model, PATH)

# Load entire model
# Model class must be defined somewhere
model = torch.load(PATH)
model.eval()

*출처 : https://pytorch.org/tutorials/beginner/saving_loading_models.html

 

Saving and Loading Models — PyTorch Tutorials 1.10.1+cu102 documentation

Note Click here to download the full example code Saving and Loading Models Author: Matthew Inkawhich This document provides solutions to a variety of use cases regarding the saving and loading of PyTorch models. Feel free to read the whole document, or ju

pytorch.org

 

3. checkpoints

  • 학습의 중간 결과를 저장, 최선의 결과 선택
  • earlystopping 기법 사용 시 이전 학습의 결과물 저장
  • loss와 metric 값을 지속적으로 확인 저장
  • 일반적으로 epoch, loss, metric(accuracy 등의 평가척도를 말함)을 함께 저장하여 확인
  • colab에서 지속적 학습 위해 필요
  • torch.save() 안에 dict type 괄호를 이용해 dict type으로, 모델 정보를 epoch와 함께 저장 + 제목만 봐도 성능을 가늠할 수 있도록 설정하는 것이 일반적

 

4. Pretrained model Transfer learning

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
  • 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 당연히 높음 -> 여기에 데이터가 적은 모델을 추가적으로 적용시키면 적은 데이터만 가지고도 좋은 성능을 낼 수 있게 됨
  • 현재의 DL에서 흔한 학습 기법
  • backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행
  • NLP는 HuggingFace가 사실상 표준(-> NLP할거면 HuggingFace 쓸 줄 알아야)

 

5. Freezing

  • pretrained model 활용 시 모델의 일부분을 frozen 시킴
  • Stepping frozen : 데이터의 구간을 나눠서, 하나 튜닝하고 나머지는 frozen 시키고, 그 다음 거 튜닝하고 나머지는 frozen시키면서 step by step으로 튜닝 시키는 기법
  • 예시 : vgg16모델을 사용한 transfer learning(아래 링크)

https://www.analyticsvidhya.com/blog/2021/06/transfer-learning-using-vgg16-in-pytorch/

 

Transfer Learning using VGG16 in Pytorch | VGG16 Architecture

In this article, we are going to learn about Transfer Learning using VGG16 in Pytorch and see how as a data scientist we can implement it

www.analyticsvidhya.com

 

728x90