최근 딥러닝 경향
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
'AI > AITech 3기' 카테고리의 다른 글
[PyTorch] 8강 Multi-GPU 학습 (1) | 2022.01.27 |
---|---|
[PyTorch] 7강 Monitoring tools for PyTorch (2) | 2022.01.27 |
[PyTorch] super().__init__() 과 super(MyClass, self).__init__() 차이 (2) | 2022.01.25 |
[PyTorch] 5강 Datasets & dataloaders (2) | 2022.01.25 |
[PyTorch] 4강 AutoGrad & Optimizer (1) | 2022.01.25 |