[부스트캠프 AI tech Pytorch Basic] week02 (2022.01.26)

redgreen·2022년 1월 26일
0

06 모델 불러오기(colab)

강의 소개

이번 강의에선 PyTorch 모델 저장 및 불러오는 방법과 이어 학습하기(Transfer Learning)를 학습합니다. state_dict의 의미와 모델의 파라미터를 여러 정보들과 함께 저장하고 불러오는 법을 배우고 전에 학습되어 있는 모델을 활용하는 법을 배웁니다.
본 강의에서 배운 것을 통해 Loss와 Metric에 따라 모델을 저장하고, 이어학습하기, 더 나아가 public site에 있는 학습해둔 모델 활용법까지 익힙니다.

model.save()

  • 학습 결과 저장
  • 모델형태와 파라미터 저장
  • 중간과정 저장 및 학습 재연성 향상
  • parameter만 저장/불러오기
    • torch.save(model.state_dict(), 'model.pt')
    • new_model = TheModelClass()
    • new_model.load_state_dict(torch.load('model.pt')
  • architecture 저장/불러오기
    • torch.save(model, 'model.pt')
    • model = torch.load('model.pt')
  • 모델 요약
from torchsummary import summary
summary(vgg, (3, 224, 224))

checkpoints

  • 학습의 중간결과 저장
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']
  • dictionary 형태로 저장
  • nn.BCEWithLogitsLoss(): sigmoid + BCE

Transfer Learning

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
  • 일반적으로 대용량 데이터셋으로 만들어진 모델 성능이 좋음
  • DL에서 일반적인 학습 기법
  • backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행
  • TorchVision/Huggingface에서 주로 제공
  • pretrained model 활용시 일부분을 frozen 시킴
  • 모델 불러오기
    • vgg = torchvision.models.vgg16(pretrained=True).to(device)
  • 모델 사용(마지막 레이어만 바꾸기)
    vgg.fc = torch.nn.Linear(1000, 1)
  • 직접 만들기
  • 가중치 동결(frozen)
for param in my_model.parameters():
	param.requires_grad = False
for param in my_model.linear_layers.parameters():
	param.requires_grad = True

07 Monitoring tools for PyTorch

tensorboard: colab1 colab2
wandb: colab3

강의 소개

PyTorch를 이용한 학습 시 metric등을 기록할 때, cli에 출력하는 print문 외에 사용할 수 있는 Tensorboard, weight & biases를 학습합니다. 이를 통해 딥러닝 모델 학습 실험들을 파라미터와 Metric들을 자동으로 저장하는 실험 관리 프로세스를 익힐 수 있고, 코드 버저닝, 협업 관리, 더 나아가 MLOps의 전체적인 흐름을 확인할 수 있습니다.

Tensorboard

  • TensorFlow의 프로젝트로 만들어진 시각화 도구
  • 학습 그래프, metric, 학습 결과 시각화 지원
  • pytorch도 연결 가능
    scaler: metric(acc, loss..) 등 상수 값의 연속(epoch)을 표시
    graph: 모델의 computational graph 표시
    histogram: weight 등 값의 분포를 표현
    image: 예측 값과 실제 값을 비교 표시
    mesh: 3d 형태의 데이터를 표현하는 도구

  • Tensorboard 기록을 위한 directory 생성
    • log_base_dir: 일반적으로 프로젝트/실험 형식으로 작성

  • 기록 생성 객체 SummaryWriter 생성
    • writer.add_scalar(category, float, epoch)
    • writer.flush(): 값 기록(disk에 쓰기)

  • Tensorboard 실행코드(jupyter에서 결과 확인)
    %load_ext tensorboard
    %tensorboard --logdir {logs_base_dir}

  • 다른방식


  • histogram
    • weight 값을 조정할 때 확인

  • image

  • mesh

  • hyper parameter


weight & biases(wandb, colab, doc)

  • 머신러닝 실험을 원활히 지원하기 위한 상용도구
  • 협업, code versioning, 실험 결과 기록 등 제공
  • MLOps의 대표적인 툴로 저변 확대 중

  • wandb.com 접속 > setting > API키 확인
  • profile > create new project
    !pip install wandb -q
    import wandb
    wandb.init(project='myproject', entity='redgreen')
    ...
    config={'epochs':EPOCHS, 'batch_size':BATCH_SIZE,
    'learning_rate' : LEARNING_RATE}
    ...
    wandb.init(project='myproject', config=config)
    ...
    wandb.log({'accuracy':train_acc, 'loss':train_loss})
profile
인공지능 꿈나무

0개의 댓글