강의 소개
이번 강의에선 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
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})