[TIL PyTorch] 파이토치 학습 모델 저장 및 로드
모델 불러오기
학습 결과를 공유하고 싶을 때 사용.
모델을 저장할 필요가 있다.
model.save()
- 학습의 결과를 저장하기 위한 함수.
- 모델 형태(architecture)와 파라메터를 저장.
- 모델 학습 중간 과정의 저장을 통해 최선의 결과모델을 선택.
- 만들어진 모델을 외부 연구자와 공유하여 학습 재연성 향상.
- state_dict 모델의 파라메터를 표시.
모델의 파라미터를 저장
torch.save(model.state_dict(),path)
모델의 형태에서 파라메터만 load
new_model = TheModelClass()
new_model.load_state_dict(torch.load(path),"model.pt")
모델의 architecture 저장
torch.save(model,path)
모델의 architecture와 함께 load
model = torch.load(path)
checkpoints
- 학습의 중간 결과를 저장하여 최선의 결과를 선택.
- earlystopping 기법 사용시 이전 학습의 결과물을 저장.
- loss와 metric 값을 지속적으로 확인 저장.
- 일반적으로 epoch, loss, metric을 함께 저장하여 확인.
- colab에서 지속적인 학습을 위해 필요.
torch.save({
"epoch":e,
"model_state_dict":model.state_dict(),
"optimizer_state_dict":optimizer.state_dict(),
"loss":epoch_loss,
},path)
checkpoint = torch.load(path)
model.load_state_dict(checkpoint["model_state_dict"])
optimizer.state_dict(checkpoint["optimizer_state_dict"])
epoch = checkpoint["epoch"]
loss = checkpoint["loss"]
Transfer learning
- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용.
- 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능 향상.
- 현재의 DL에서는 가장 일반적인 학습 기법.
- backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행함.
Freezing
- pretrained model을 활용시 모델의 일부분을 frozen 시킴.
사전 학습된 모델 불러오기
class MyNewNet(nn.Module):
def __init__(self):
super(MyNewNet, self).__init__()
self.vgg19 = models.vgg19(pretrained=True)
모델에 마지막 Linear Layer 추가
self.linear_layer = nn.Linear(1000,1)
def forward(self,x):
x = self.vgg19(x)
return self.linear_layer(x)
마지막 레이어를 제외하고 frozen
for param in my_model.parameters():
param_requires_grad = False
for param in my_model.linear_layer.parameters():
param.requires_grad = True