-
[Pytorch]5. Model Load인공지능/부스트캠프 Ai Tech 2022. 1. 28. 23:45728x90
[Pytorch]5. Model Load In [1]:from IPython.core.display import display, HTML display(HTML("<style>.container { width:90% !important; }</style>"))
In [2]:from IPython.display import Image import numpy as np import torch from torch import nn from torch import Tensor
In [2]:# Print model's state_dict print("Model's state_dict:") for param_tensor in model.state_dict(): # state_dict : 모델의 파라메터를 표시 print(param_tensor, "\t", model.state_dict()[param_Tensor].size()) torch.save(model.state_dict(), # state_dict() , order dict, 모델의 파라메터 저장 os.path.join(MODEL_PATH, "model.pt")) # 모델 불러오기, 같은 모델의 형태에서 파라메터만 load new_model = TheModelClass() new_model.load_state_dict(torch.load(os.path.join( MODEL_PATH, "model.pt"))) # 모델의 architecture와 함께 save torch.save(model, os.path.join(MODEL_PATH, "model.pt")) # 모델의 architecture와 함께 load model = torch.load(os.path.join(MODEL_PATH, "model.pt"))
In [ ]:from torchsummary import summary summary(model, (3, 224, 224)) # 모델의 크기 및 정보를 요약해서 보여줌
checkpoints¶
- 학습의 중간 결과를 저장해서 최선의결과를 선택
- earlystopping 기법 사용시 이전 학습의 결과물을 저장
- loss / metric 값을 지속적으로 확인하며 저장
- epoch, loss, metric을 함께 저장하여 확인
- colab에서 지속적인 학습을 위해 필요하다
In [ ]:torch.save({ 'epoch' : e, # 모델의 정보를 epoch과 함께 저장 'model_state_dict' : model.state_dict(), 'optimizer_state_dict' : optimizer.state_dict(), 'loss' : epoch_loss, }, f"saved/checkpoint_model_{e}_{epoch_loss/len(dataloader)}_{epoch_acc/len(dataloader)}.pt") # 모델 불러오기 checkpoint = torch.load(PATH) model.load_state_dict(checkpoint['model_state_dict']) optimizer.load_state_dict(checkpoint['optimizer_state_dict']) epoch = checkpoint['epoch'] loss = checkpoint['loss']
In [ ]:import warnings # warings 코드를 안보이게 하는 코드 warnings.filterwarnings("ignore")
In [ ]:model.to(device) criterion = nn.BCEWithLogitsLoss() # 마지막에 시그모이드 함수를 달아준다 optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)
In [3]:Image("../images/1_nOlCw_ghR5jHXAVieF3r0A.png")
Out[3]:In [ ]:vgg = models.vgg16(pretrained=True).to(device) # vgg16 을 vgg에 할당 class MyNetNet(nn.Module): def __init__(self): super(MyNewNet, self).__init__() self.vgg19 = models.vgg18(pretrained=True) # 모델의 마지막 Linear Layer 추가 self.linaer_layers = nn.Linaer(1000,1) # define forward def forward(self, x): x = self.vgg19(x) return self.linaer_layers(x) # 마지막 레이어를 제외하고 frozen for param in my_model.parameters(): param.requires_grad = False # 기본 모델은 학습을 시키지 않음 for param in my_model.linear_layers.parameters(): param.requires_grad = True
In [ ]:In [ ]:In [ ]:In [ ]:In [ ]:'인공지능 > 부스트캠프 Ai Tech' 카테고리의 다른 글
[Data Viz] 0. 시각화 (0) 2022.02.04 [Pytorch] hook&apply (0) 2022.02.01 [Pytorch]4. Dataset & Dataloader (0) 2022.01.28 [Pytorch]3. AutoGrad & Optimizer (0) 2022.01.28 [Pytorch]2. project template (0) 2022.01.28