코딩하는 해맑은 거북이

[PyTorch] PyTorch 구조2 본문

Python/Tensorflow | PyTorch

[PyTorch] PyTorch 구조2

#CJE 2023. 3. 15.
본 게시물의 내용은 '부스트캠프 AI Tech - PyTorch(최성철)' 강의를 듣고 작성하였다.
해당 글은 아래의 2가지를 다룬다.
1. 모델 불러오기
  ▶ model.save()
  ▶ checkpoints
  ▶ Pretrained model Transfer learning
2. Monitoring tools for PyTorch
  ▶ Tensorboard
  ▶ weight & biases (WanB)

 

1. 모델 불러오기

▶ model.save()

- 학습의 결과를 저장하기 위한 함수
- 모델 형태(architecture)와 파라메터를 저장
- 모델 학습 중간 과정의 저장을 통해 최선의 결과모델을 선택
- 만들어진 모델을 외부 연구자와 공유하여 학습 재연성 향상

# 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(),    # 모델의 파라메터를 저장
           os.path.join(MODEL_PATH, "model.pt"))
new_model = TheModelClass()   # 같은 모델의 형태에서 파라메터만 load
new_model.load_state_dict(torch.load(os.path.join(
    MODEL_PATH, "model.pt")))
torch.save(model, os.path.join(MODEL_PATH, "model_pickle.pt"))  # 모델의 architecture와 함께 저장
model = torch.load(os.path.join(MODEL_PATH, "model_pickle.pt")) # 모델의 architecture와 함께 load

 

 

▶ checkpoints

- 학습의 중간 결과를 저장하여 최선의 결과를 선택
- earlystopping기법 사용시 이전 학습의 결과물을 저장
- loss와 metric값을 지속적으로 확인 저장
- 일반적으로 epoch,loss,metric을 함께 저장하여 확인
- colab에서 지속적인 학습을 위해 필요

torch.save({    # 모델의 정보를 epoch과 함께 저장
        '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")
# checkpoints를 load할때
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']

 

 

▶ Pretrained model Transfer learning

1) Transfer learning

- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
- 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능↑
- 현재의 DL에서는 가장 일반적인 학습 기법
- backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행함

 cf) TorchVision은 다양한 기본 모델을 제공한다. (https://github.com/huggingface/pytorch-image-models#introduction)

 cf) NLP는 HuggingFace가 사실상 표준이다. (https://huggingface.co/models)

 

2) Freezing

- pretrained model을 활용시 모델의 일부분을 frozen시킴

vgg = models.vgg16(pretrained=True).to(device)  # vgg16모델을 vgg에 할당하기
class MyNewNet(nn.Module):   
    def __init__(self):
        super(MyNewNet, self).__init__()
        self.vgg19 = models.vgg19(pretrained=True)
        self.linear_layers = nn.Linear(1000, 1)   # 모델에 마지막 Linear Layer 추가


    # Defining the forward pass    
    def forward(self, x):
        x = self.vgg19(x)        
        return self.linear_layers(x)
for param in my_model.parameters():
    param.requires_grad = False     # 마지막 레이어를 제외하고 frozen
for param in my_model.linear_layers.parameters():
    param.requires_grad = True

 

2. Monitoring tools for PyTorch

▶ Tensorboard

- TensorFlow의 프로젝트로 만들어진 시각화 도구
- 학습 그래프, metric, 학습 결과의 시각화 지원
- PyTorch도 연결 가능 → DL시각화 핵심 도구

 

* 기본 저장값

- scalar : metric 등 상수 값의 연속(epoch)을 표시
- graph : 모델의 computational graph 표시
- histogram : weight 등 값의 분포를 표현
- Image, Text : 예측 값과 실제 값을 비교 표시
- mesh : 3d 형태의 데이터를 표현하는 도구

import os
logs_base_dir = "logs"
os.makedirs(logs_base_dir, exist_ok=True) # Tensorboard 기록을 위한 directory 생성
from torch.utils.tensorboard import SummaryWriter # 기록 생성 객체 SummaryWriter 생성
import numpy as np

exp = f"{logs_base_dir}/ex3"	# 저장 경로
writer = SummaryWriter(exp)
for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter) # add_scalar함수: scalar값을 기록
    writer.add_scalar('Loss/test', np.random.random(), n_iter)  # Loss/train:loss category에 train값
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter) # n_iter :x축의 값
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
writer.flush()  #  기록 (disk에 쓰기)
%load_ext tensorboard   # tensorboard 실행 방법1 : jupyter상에서 tensorboard 수행
%tensorboard --logdir "logs"  # tensorboard 실행 방법2 : 파일 위치 지정 (logs_base_dir) / 콘솔에서도 사용가능

 

 

 

▶ weight & biases (WanB)

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

config={"epochs": EPOCHS, "batch_size": BATCH_SIZE, "learning_rate" : LEARNING_RATE}
wandb.init(project="my-test-project", config=config)
# wandb.config.batch_size = BATCH_SIZE
# wandb.config.learning_rate = LEARNING_RATE
wandb.log({'accuracy': train_acc, 'loss': train_loss})  # 기록

 

 

* 튜토리얼

https://wandb.ai/site/articles/intro-to-pytorch-with-wandb

 

Intro to Pytorch with W&B on Weights & Biases

by Lavanya Shukla — Walk through a simple convolutional neural network to classify the images in CIFAR10 using PyTorch

wandb.ai

 

'Python > Tensorflow | PyTorch' 카테고리의 다른 글

[PyTorch] 사칙연산  (0) 2023.03.17
[PyTorch] PyTorch 활용하기  (0) 2023.03.16
[PyTorch] PyTorch 구조1  (0) 2023.03.13
[PyTorch] PyTorch 기본  (0) 2023.03.13
[Tensorflow] Tensorflow 정의 및 동작 방식  (0) 2021.03.19
Comments