- Today
- Total
hye-log
[๋ถ์คํธ์บ ํ AI Tech]WEEK 02_DAY 08 ๋ณธ๋ฌธ
๐ ๊ฐ๋ณํ์ต
[6] ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
1. model.save()
1) ํ์ต์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํจ์
2) ๋ชจ๋ธ์ ํํ์ parameter๋ฅผ ์ ์ฅ
# Print model's state_dict
# state_dict: ๋ชจ๋ธ์ parameter๋ฅผ ํ์
for param_tensor in model.state_dict():
print(param_tensor, "\t", model.state_dict()[param_tensor].size())
# ๋ชจ๋ธ์ parameter๋ฅผ ์ ์ฅ
torch.save(model.state_dict(), os.path.join(MODEL_PATH, "model.pt"))
# ๊ฐ์ ๋ชจ๋ธ์ ํํ์์ parameter๋ง load
new_model = TheModelClass()
new_model.load_state_dict(torch.load(os.path.join(MODEL_PATH, "model.pt")))
# ๋ชจ๋ธ์ architecture์ ํจ๊ป ์ ์ฅ
torch.save(model, os.path.join(MODEL_PATH, "model.pt"))
# ๋ชจ๋ธ์ architecture์ ํจ๊ป load
model = torch.load(os.path.join(MODEL_PATH, "model.pt"))
2. checkpoints
1) ํ์ต์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ํ
2) earlystopping ๊ธฐ๋ฒ ์ฌ์ฉ ์ ์ด์ ํ์ต์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅ
3) epoch, loss, metric์ ํจ๊ป ์ ์ฅํ์ฌ ํ์ธ
# checkpoint
# ๋ชจ๋ธ์ ์ ๋ณด๋ฅผ epoch์ ํจ๊ป ์ ์ฅ
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')
# load checkpoint
checkpoint = torch.load(PATH)
# load model of checkpoint
model.load_state_dict(checkpoint['model_state_dict'])
# load optimizer of checkpoint
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
# load epoch of checkpoint
epoch = checkpoint['epoch']
# load loss of checkpoint
loss = checkpoint['loss']
3. Transfer Learning
1) ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ง๋ ๋ชจ๋ธ์ ํ์ฌ ๋ฐ์ดํฐ์ ์ ์ฉ
2) ์ผ๋ฐ์ ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋ ์ข์
3) Deep Learning์์ ์ผ๋ฐ์ ์ธ ํ์ต ๊ธฐ๋ฒ
4) TorchVision์์ ๋ค์ํ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ๊ณต
- ์ฐธ๊ณ : https://pytorch.org/vision/0.8/models.html
torchvision.models — Torchvision 0.8.1 documentation
torchvision.models The models subpackage contains definitions of models for addressing different tasks, including: image classification, pixelwise semantic segmentation, object detection, instance segmentation, person keypoint detection and video classific
pytorch.org
5) freezing : pretrained model์ ํ์ฉ์ ๋ชจ๋ธ์ ์ผ๋ถ๋ถ์ frozen ์ํด
# transfer learning
# vgg16 ๋ชจ๋ธ์ vgg์ ํ ๋น
vgg = models.vgg16(pretrained=True).to(device)
class MyNewNet(nn.Module):
def __init__(self):
super(MyNewNet, self).__init__()
self.vgg19 = models.vgg19(pretrained=True)
# ๋ชจ๋ธ์ ๋ง์ง๋ง์ linear_layer ์ถ๊ฐ
self.linear_layers = nn.Linear(1000, 1)
# Defining the forward pass
def forward(self, x):
x = self.vgg19(x)
return self.linear_layers(x)
# ๋ง์ง๋ง ๋ ์ด์ด๋ฅผ ์ ์ธํ๊ณ frozen
for param in my_model.parameters():
param.requires_grad = False
for param in my_model.linear_layers.parameters():
param.requires_grad = True
[7] Monitoring tools for PyTorch
1. Tensorboard
1) TensorFlow์ ํ๋ก์ ํธ๋ก ๋ง๋ค์ด์ง ์๊ฐํ ๋๊ตฌ
2) ํ์ต ๊ทธ๋ํ, metric, ํ์ต ๊ฒฐ๊ณผ์ ์๊ฐํ ์ง์
3) PyTorch ์ฐ๊ฒฐ ๊ฐ๋ฅ
4) ์ข ๋ฅ
- scalar : metric ๋ฑ ์์ ๊ฐ์ ์ฐ์์ ํ์
- graph : ๋ชจ๋ธ์ computational graph ํ์
- histogram : weight ๋ฑ ๊ฐ์ ๋ถํฌ๋ฅผ ํํ
- image : ์์ธก ๊ฐ๊ณผ ์ค์ ๊ฐ์ ๋น๊ต๋ฅผ ํ์
- mesh : 3d ํํ์ ๋ฐ์ดํฐ๋ฅผ ํํ
# Tensorboard
import os
logs_base_dir = "logs"
# Tensorboard ๊ธฐ๋ก์ ์ํ directory ์์ฑ
os.makedirs(logs_base_dir, exist_ok=True)
from torch.utils.tensorboard import SummaryWriter
import numpy as np
# ๊ธฐ๋ก ์์ฑ ๊ฐ์ฒด SummaryWriter ์์ฑ
exp = f"{logs_base_dir}/ex3"
writer = SummaryWriter(exp)
for n_iter in range(100):
# add_scalar : scalar ๊ฐ์ ๊ธฐ๋ก
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)
# ๊ฐ ๊ธฐ๋ก(disk์ ์ฐ๊ธฐ)
writer.flush()
# tensorboard ์ํ
%load_ext tensorboard
%tensorboard --logdir "logs"
2. Weights&Biases
1) ๋จธ์ ๋ฌ๋ ์คํ์ ์ํํ ์ง์ํ๊ธฐ ์ํ ์์ฉ๋๊ตฌ
2) ํ์ , code versioning, ์คํ ๊ฒฐ๊ณผ ๊ธฐ๋ก ๋ฑ ์ ๊ณต
# wandb
!pip install wandb-q
# config ์ค์
config={'epochs':EPOCHS, 'batch_size':BATCH_SIZE, 'learning_rate':LEARNING_RATE}
wandb.init(project='my-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.cuda.FloatTensor)
#...
optimizer.step()
#...
# wandb์ ๊ธฐ๋ก
wandb.log({'accuracy': train_acc, 'loss': train_loss})
๐ ์ค๋์ ํ๊ณ
์ค์ ์๋ ๊ฐ์ ํ์ดํ ์น ๊ฐ์ 6๊ฐ์ ๋ฃ๊ณ , ์คํ์๋ 7๊ฐ๊ณผ ๊ธฐ๋ณธ 2 ๊ณผ์ ๋ฅผ ํ์ด๋ณด์๋ค. ํ์คํ ๋ถ๋์ด๊ฐ ๋์ค์ง ์๋ ๊ธฐ๋ณธ 1 ๊ณผ์ ๋ณด๋ค ์์ ์ ์ด๋ณด์์ผ๋ ์ด๋ ต๋ค.. ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ ๋ฐ์ดํฐ์ ์ ๋ง๋ค๊ณ ์ฝ๋๋ก ํ๋์ฉ ์์ฑํด๋ณด๋ ์ดํด๊ฐ ๊ฐ๋๊ฑฐ ๊ฐ๊ธฐ๋ ํ๊ณ ์์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋คใ ใ ํผ์ด์ธ์ ๋๋ ๊ณผ์ ๊ด๋ จ๋ ์ด์ผ๊ธฐ๋ง ํ๊ฑฐ ๊ฐ๋ค. ๋ฒ์จ ์์์ผ, ์ด๋ฒ ์ฃผ๋ ๊ณผ์ ๋ง๊ฐ์ด ๋นจ๋ผ์ ๋ด์ผ๊น์ง ๊ธฐ๋ณธ 1, 2 ๊ณผ์ ๋ค์ ์ ๊ฒํ๊ณ ์ ์ถํ๋ ๊ฒ ๋ชฉํ์ด๋ค. ์ค๋ ๋๋ฐ๋๋ฐ 1ํ์ฐจ์์๋ ๋ณ์ฑ์ค ๋ง์คํฐ๊ป์ ๋ง์คํฐ๋์ ์ถ์ ๋ํด์ ์๊ฐํด์ฃผ์ จ๋ค. ์คํจ์ ์ฑ๊ณต์ด ๋ฐ๋ณต๋ ์ธ์์ด์๋๋ฐ, ์ง๊ธ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ธฐ์๋ ์ฑ๊ณตํ ์ธ์์ผ๋ก ๋ณด์ด์ง๋ง, ๋ง์คํฐ๋๋ ์๋ ์๋ ์คํจ๋ฅผ ๊ฒช์ด์ค๋ฉด์ ๋จ๋จํด์ง์ ๊ฑฐ ๊ฐ์์ ๋ถ๋ฌ์ ๋ค..!! ๋๋ ์ธ์ ๊ฐ ๋ง์คํฐ๋์ฒ๋ผ ๋จ๋จํ ์ฌ๋์ด ๋ ์ ์๊ฒ ์ง..
'Boostcourse > AI Tech 4๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ถ์คํธ์บ ํ AI Tech]WEEK 02_DAY 10 (1) | 2022.09.30 |
---|---|
[๋ถ์คํธ์บ ํ AI Tech]WEEK 02_DAY 09 (0) | 2022.09.29 |
[๋ถ์คํธ์บ ํ AI Tech]WEEK 02_DAY 07 (0) | 2022.09.27 |
[๋ถ์คํธ์บ ํ AI Tech]WEEK 02_DAY 06 (1) | 2022.09.26 |
[๋ถ์คํธ์บ ํ AI Tech]WEEK 01_DAY 05 (1) | 2022.09.23 |