꺼내먹는지식 준

Transfer Learning 듀토리얼 - (1) 모델 저장, checkpoint, 불러오기 본문

AI/PyTorch

Transfer Learning 듀토리얼 - (1) 모델 저장, checkpoint, 불러오기

알 수 없는 사용자 2022. 1. 26. 13:10

학습 된 데이터를 불러와서 적용하는 Transfer Learning 은 기본이 된지 오래다. 

 

이제부터 Transfer Learning을 하기 위한 과정들을 공부 해보고자 한다. 

 

첫번째로 모델 저장, checkpoint, 모델 불러오기를 보자 

 


학습 결과를 한번 공유하려면 어떻게 해야 할까? 

 

1) 모델 저장, 불러오는 방법 

model.save()

 

1) 학습 중, 학습 결과를 중간 중간 model 형태와 parameter를 저장

parameter만 저장해서 같은 모델을 돌릴 때, parameter만 넣어줄 수도 있다. 

2) 중간 과정 저장을 통해 최선의 결과 모델 선택 

3) 만들어진 모델을 외부 연구자와 공유 학습 재연성 향상 

 

저장

MODEL_PATH= "saved"
if not os.path.exists(MODEL_PATH):
	os.mkdirs(MODEL_PATH)
torch.save(model.state_dict(), os.path.join(MODEL_PATH, "model.pt"))

pytorch 모델 저장시 확장자 pt (pytorch)

TheModelClass, 같은 모델이 보장이 될 때만 load_state_dict를 통해 저장 파라미터 사용이 가능

 

불러오기 

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

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

#<all keys matched successfully>

pickle file 저장방법 

torch.save(model, os.path.join(MODEL_PATH, "model_pickle.pt"))
model.load(os.path.join(MODEL_PATH, "model_pickle.pt"))
model.eval()

선언된 모델 구조 확인 하는 법 

더 좋은 visualization 방법이 있다.

 

from torchsummary import summary 
summary(model, (3, 244, 244))

모델 형태, 크기 까지 볼 수 있다. 

 

2) Checkpoints

게임을 하다보면 checkpoint 지점에 도달했을 때, 그때까지의 여정이 저장되었던 것을 기억한다. 

마찬가지다. 

 

1) 학습 중간 결과를 저장하여 (학습 중 추후 결과가 더 나빠질 수도)최선의 결과를 선택할 때 사용하기 좋다. 

2) EarlyStopping 기법 사용시 이전 학습의 결과물을 저장

3) loss와 metric 값을 지속적으로 확인을 위해 저장 

4) epoch, loss, metric 을 함께 저장해야 진행과정 파악 가능 

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

 

대충만 살펴봐도 Checkpoints를 사용할 이유는 너무나 많다. 

코드 단계에서 보자. 

보통 파일명에서도 성능을 얼추 확인할 수 있게 저장한다. 

 

3) Pretrained model Transfer Learning

중국어를 배우고, 영어를 배우면 어순이 비슷해서 더 빨리 배운다. 

Transfer Learning 도 이와 같다. 

 

1) 다른 데이터셋으로 만든 모델을 현재 데이터에 적용 

2) 일반적으로는 대용량 데이터 셋으로 만들어진 모델의 성능 $\uparrow$

3) 현재는 DL에서는 가장 일반적인 학습 기법 

4) backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행

 

대표 모듈  

CV: TorchVision 

NLP: HuggingFace 

 

Frozen:

Pretrained Model 활용시 모델의 일부분 frozen 시킴 

이미 학습 된 모델을 그냥 다 가져오기는 힘들다. 

특정 위치까지만 가져오고, 그 뒷 부분 중 일부는 우리가 새로 학습을 시킬 것이다. 

앞부분의 일정부분은 학습 한 내용으로 아예 파라미터값을 고정하여, 업데이트 안하는 방법이다. 

 

 

Stepping Frozen

나중에 찾아보자

 

TorchVision 에서 Pretrained Model을 가져와보자. 

self.linear_layers 가 추가 되었다. 

마지막 레이어만 학습 

 

 

'AI > PyTorch' 카테고리의 다른 글

sklearn StratifiedKFold 용례  (0) 2022.03.05
Tensorboard, Weight & Biases 간단 사용  (0) 2022.01.26
Pytorch nn.Module 총정리 / 모델 만드는 법  (0) 2022.01.25
Torch Math Operations  (0) 2022.01.25
Torch Tensors  (0) 2022.01.25
Comments