[Boostcamp 2주차] PyTorch 구조 학습하기2
16749 단어 PyTorch부스트캠프 AI Tech학습 정리PyTorch
1. 모델 불러오기
📌 핵심 정리
- model.save()
- checkpoints
- pretrained model - Transfer learning
model.save()
ex)
# 모델의 parameters 저장
torch.save(model.state_dict(), # state_dict: 모델의 파라미터 표시
os.path.join(Model_Path, "model.pt")) # OrderedDict 형태로 저장 -> 쉽게 불러옴
# 저장한 모델 파라미터 불러오기
Mymodel = Model() # 같은 모델에 파라미러를 load 해야 함.
Mymodel.load_state_dict(torch.load(os.path.join(Model_Path, "model.pt")))
# 파라미터만 말고 모델까지 저장하기
torch.save(model, os.path.join(Model_Path, "model.pt"))
# 저장한 모델 불러오기
Mymodel = torch.load(os.path.join(Model_Path, "model.pt"))
- 학습 결과를 저장하기 위한 함수
- 파라미터만 저장 or 모델 형태까지 저장
- 모델 학습 중간 과정에서 저장하여 최선의 결과 모델 선택
- 만들어진 모델을 외부와 공유하여 학습 재연 가능
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']
- 학습의 중간 결과를 저장
- earlystopping 사용시 이전 학습의 결과물 저장
- loss와 metric 값을 지속적으로 확인하고 저장
- 일반적으로 epoch, loss, metric을 함께 저장
- 런타임이 끊기는 colab 환경에서 지속적인 학습을 위해 필요
Transfer learning
ex) resnet18
Class MyNet(nn.Module):
def __init__(self):
super(MyNet, self).__init()
self.resnet = models.resnet18(pretrained=True)
self.linear_layers = nn.Linear(512, 1)
def forward(self, x):
x = self.resnet(x)
return self.linear_layers(x)
for param in MyModel.parameters():
param.required_grad = False # 모든 parameters 동결
for param in MyModel.linear_layers.parameters():
param.required_grad = True # 마지막 레이어만 학습
- 다른 데이터셋으로 학습한 모델 (pretrained model)을 내 데이터셋에 적용
- 일반적으로 대용량 데이터셋을 학습한 모델의 성능이 좋음
- 현재 DL의 가장 일반적인 학습 방법
- backbone architecture 가 잘 학습된 모델에서 일부분만 변경 (fc layer 추가 혹은 input, output shape 변경 등...)
- 백본 모델의 일부분을 frozen (동결) 시킴
- CV -> TorchVision에서 다양한 기본 모델 제공
NLP -> HuggingFace가 사실상 표준
2. Monitoring Tools
Tensorboard
- TensorFlow에서 만들어진 시각화 도구
- tensorflow 외의 다른 딥러닝 프레임워크도 연결 가능
import os
logs_base_dir = "logs"
os.makedirs(logs_base_dir, exist_ok=True)
from torch.utils.tensorboard import SummaryWriter # SummaryWriter - 기록 생성 객체
import numpy as np
writer = SummaryWriter(logs_base_dir)
for n_iter in range(100): # n_iter: x축의 값
writer.add_scalar('Loss/train', np.random.random(), n_iter)
writer.add_scalar('Loss/test', np.random.random(), n_iter)
writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
writer.flush() # scalar 값 disk에 기록
# jupyter 상에서 tensorboard 수행
# 콘솔에서도 사용 가능
%load_ext tensorboard
%tensorboard --logdir {logs_base_dir}
weight & biases
- 머신러닝 실험을 지원하기 위한 상용도구
- 협업, code versoning, 실험 결과 기록 등
- MLOps의 대표적인 툴로 확대 중
!pip install wandb -q
config = {"epochs": EPOCHS, "batch_size": BATCH_SIZE, "learning_rate": LEARNING_RATE}
wandb.init(project="test-project", config=config)
for e in range(1, EPOCHS+1):
epoch_loss = 0
epoch_acc = 0
for X_batch, y_batch in train_dataset:
X_batch, y_batch = X_batch.to(device), y_batch.to(device).type(torch.cude.FloatTensor)
optimizer.step()
wandb.log({'accuracy': train_acc, 'loss': train_loss}) # tensorboard의 add_어쩌구 함수와 동일
Author And Source
이 문제에 관하여([Boostcamp 2주차] PyTorch 구조 학습하기2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yoonene/Boostcamp-2주차-3-PyTorch-구조-학습하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ex)
# 모델의 parameters 저장
torch.save(model.state_dict(), # state_dict: 모델의 파라미터 표시
os.path.join(Model_Path, "model.pt")) # OrderedDict 형태로 저장 -> 쉽게 불러옴
# 저장한 모델 파라미터 불러오기
Mymodel = Model() # 같은 모델에 파라미러를 load 해야 함.
Mymodel.load_state_dict(torch.load(os.path.join(Model_Path, "model.pt")))
# 파라미터만 말고 모델까지 저장하기
torch.save(model, os.path.join(Model_Path, "model.pt"))
# 저장한 모델 불러오기
Mymodel = torch.load(os.path.join(Model_Path, "model.pt"))
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']
ex) resnet18
Class MyNet(nn.Module):
def __init__(self):
super(MyNet, self).__init()
self.resnet = models.resnet18(pretrained=True)
self.linear_layers = nn.Linear(512, 1)
def forward(self, x):
x = self.resnet(x)
return self.linear_layers(x)
for param in MyModel.parameters():
param.required_grad = False # 모든 parameters 동결
for param in MyModel.linear_layers.parameters():
param.required_grad = True # 마지막 레이어만 학습
NLP -> HuggingFace가 사실상 표준
Tensorboard
- TensorFlow에서 만들어진 시각화 도구
- tensorflow 외의 다른 딥러닝 프레임워크도 연결 가능
import os
logs_base_dir = "logs"
os.makedirs(logs_base_dir, exist_ok=True)
from torch.utils.tensorboard import SummaryWriter # SummaryWriter - 기록 생성 객체
import numpy as np
writer = SummaryWriter(logs_base_dir)
for n_iter in range(100): # n_iter: x축의 값
writer.add_scalar('Loss/train', np.random.random(), n_iter)
writer.add_scalar('Loss/test', np.random.random(), n_iter)
writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
writer.flush() # scalar 값 disk에 기록
# jupyter 상에서 tensorboard 수행
# 콘솔에서도 사용 가능
%load_ext tensorboard
%tensorboard --logdir {logs_base_dir}
weight & biases
- 머신러닝 실험을 지원하기 위한 상용도구
- 협업, code versoning, 실험 결과 기록 등
- MLOps의 대표적인 툴로 확대 중
!pip install wandb -q
config = {"epochs": EPOCHS, "batch_size": BATCH_SIZE, "learning_rate": LEARNING_RATE}
wandb.init(project="test-project", config=config)
for e in range(1, EPOCHS+1):
epoch_loss = 0
epoch_acc = 0
for X_batch, y_batch in train_dataset:
X_batch, y_batch = X_batch.to(device), y_batch.to(device).type(torch.cude.FloatTensor)
optimizer.step()
wandb.log({'accuracy': train_acc, 'loss': train_loss}) # tensorboard의 add_어쩌구 함수와 동일
Author And Source
이 문제에 관하여([Boostcamp 2주차] PyTorch 구조 학습하기2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoonene/Boostcamp-2주차-3-PyTorch-구조-학습하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)