부캠 TIL 0819 - Transfer learning, WandB

기린이·2021년 8월 19일
0

부캠 TIL 🦆

목록 보기
14/53
post-thumbnail

질문

  • BCEWithLogitsLoss랑 BCEloss랑 뭐가 다른거지 강의에서는 전자가 시그모이드를 뒤에 달아준다는데 원래도 자동으로 달아주지 않나..?
super(Add, self).__init__()
super().__init__()
  • 위의 두가지의 차이점은 전자는 명시된 클래스의 부모클래스까지 돌고 온다는 것. 명시해주지 않는다면 모든 부모클래스를 돌고 온다는 것이다. 참고

알게된 것

torchvision.transforms.Grayscale(num_output_channels=3)
# grayscale의 1채널 영상을 3채널로 동일한 값으로 확장함

PYTORCH

Transfer learning

model.save

pytorch 모델을 저장하는 방법은 두가지가 있다.

weight만 저장

  • 저장
toch.save(model.state_dict(), os.path.join(MODEL_PATH, 'model.pt'))
  • 로딩
new_model = model() # 모델정의먼저하고
new_model.load_state_dict(os.path.join(MODEL_PATH, 'model.pt') # weight로드

정의한 모델과 weight의 아키텍처형태가 같아야된다!!


모델, weight 저장

  • 저장
torch.save(model, os.path.join(MODEL_PATH, 'model.pt'))
  • 로딩
new_model = torch.load(os.path.join(MODEL_PATH, 'model.pt'))

checkpoints

# 현재 모델의 epoch, weight, optimizer, loss 저장
torch.save({'epoch': e,
            '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']

Transter learning

요런 다양한 모델을 가져다가 조금 변형해서 쓰는것

  • stepping fozen
    레이어 하나씩만 trainable하게 하고 나머지 frozen하는 것을 반복

  • 모델 불러오기

import torch
from torchvision import models

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
vgg = models.vgg16(pretrained=True).to(device)
  • 레이어에는 이름이 붙어있다.
for name, layer in vgg.named_modules():
    print(name, layer)
  • frozen

vgg = models.vgg16(pretrained=True).to(device)
class MyNewNet(nn.Module):
    def __init__(self):
        super(MyNewNet, self).__init__()
        self.vgg19 = models.vgg19(pretrained=True)
        self.linear_layers = nn.Linear(1000, 1)

   def forward(self, x):
      x = self.vgg19(x)
     return self.linear_layers(x)

for param in my_model.parameters():
    param.requires_grad = False
    
for param in my_model.linear_layers.parameters():
    param.requires_grad = True

Monitoring tools for PyTorch

Tensorboard

  • scaler, graph, historgram, image, mesh

Weight&biases

  • mlops툴
  • 협업 가능
  • 유료
profile
중요한 것은 속력이 아니라 방향성, 공부하며 메모를 남기는 공간입니다.

0개의 댓글