โ ๏ธ ๋ณธ ๋ด์ฉ์ PyTorch Korea์ ๊ณต์ ๋ฌธ์์ ๊ธฐ๋ฐํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ์ ์๊ฒ์ด๋ ์ํด๋ฐ๋๋๋ค!
๋ชจ๋ธ ๋งค๊ฐ๋ณ์ ์ต์ ํํ๊ธฐ
ํ์ดํ ์น(PyTorch) ๊ธฐ๋ณธ ์ตํ๊ธฐ|| ๋น ๋ฅธ ์์|| ํ ์(Tensor)|| Dataset๊ณผ Dataloader|| ๋ณํ(Transform)|| ์ ๊ฒฝ๋ง ๋ชจ๋ธ ๊ตฌ์ฑํ๊ธฐ|| Autograd|| ์ต์ ํ(Optimization)|| ๋ชจ๋ธ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ ์ด์ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ค๋น
tutorials.pytorch.kr
Model ๋งค๊ฐ๋ณ์ ์ต์ ํ ํ๊ธฐ
์ด๋ฒ์๋ ์ค๋น๋ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ก, ๋ฐ์ดํฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ต์ ํ ํ์ฌ ๋ชจ๋ธ์ ํ์ต, ๊ฒ์ฆ, ํ ์คํธ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
- ๋ชจ๋ธ์ ํ์ตํ๋ ๊ณผ์ ์ ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
- ๊ฐ ๋ฐ๋ณต ๋จ๊ณ์์ ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ถ์ธกํ๊ณ , ์ถ์ธก๊ณผ ์ ๋ต ์ฌ์ด์ ์ค๋ฅ(์์ค(loss))๋ฅผ ๊ณ์ฐํ๊ณ , ๋งค๊ฐ๋ณ์์ ๋ํ ์ค๋ฅ์ ๋ํจ์(derivative)๋ฅผ ์์งํ ๋ค, ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด ํ๋ผ๋ฏธํฐ๋ค์ ์ต์ ํ(optimize)ํฉ๋๋ค.
- ์ด ๊ณผ์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ์๋ ๋งํฌ์ 3Blue1Brown์ Backpropagation(์ญ์ ํ)์์์ ์ฐธ๊ณ ํ์ธ์.
- 3Blue1Brown์ Backpropagation(์ญ์ ํ)์์ ๋งํฌ ์ ๋๋ค.
Pre-requisite Code (๊ธฐ๋ณธ ์ฝ๋)
์ ์ ๊ณต๋ถํ๋ ๋ด์ฉ์์ Dataset, Dataloader ๋ถ๋ถ๊ณผ ์ ๊ฒฝ๋ง ๋ชจ๋ธ ๊ตฌ์ฑํ๊ธฐ ๋ถ๋ถ์์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ต๋๋ค.
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
training_data = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor()
)
test_data = datasets.FashionMNIST(
root="data",
train=False,
download=True,
transform=ToTensor()
)
train_dataloader = DataLoader(training_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)
class NeuralNetwork(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10),
)
def forward(self, x):
x = self.flatten(x)
logits = self.linear_relu_stack(x)
return logits
model = NeuralNetwork()
Hyperparameter (ํ์ดํผํ๋ผ๋ฏธํฐ)
ํ์ดํผํ๋ผ๋ฏธํฐ(Hyperparameter)๋ ๋ชจ๋ธ ์ต์ ํ ๊ณผ์ ์ ์ ์ดํ ์ ์๋ ์กฐ์ ๊ฐ๋ฅํ ๋งค๊ฐ๋ณ์์ ๋๋ค.
- ์๋ก ๋ค๋ฅธ ํ์ดํผํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ชจ๋ธ ํ์ต๊ณผ ์๋ ด์จ(convergence rate)์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- Hyperparameter์ ๋ฐํ ๊ณต์๋ฌธ์ ์ ๋๋ค. ์ด ๋ถ๋ถ์ ๋ฐํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ๋์ค์ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
Ray Tune์ ์ฌ์ฉํ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋
๋ฒ์ญ: ์ฌํ์ค ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ ๋ณดํต์ ๋ชจ๋ธ๊ณผ ๋งค์ฐ ์ ํํ ๋ชจ๋ธ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์์ต๋๋ค. ์ข ์ข ๋ค๋ฅธ ํ์ต๋ฅ (Learnig rate)์ ์ ํํ๊ฑฐ๋ layer size๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ ์์
tutorials.pytorch.kr
- ๋ชจ๋ธ์ ํ์ตํ ๋, ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ Hyperparameter๋ฅผ ์ ์ํฉ๋๋ค.
- ์ํญ(epoch) ์ - ๋ฐ์ดํฐ์ ์ ๋ฐ๋ณตํ๋ ํ์
- ๋ฐฐ์น ํฌ๊ธฐ(batch size) - ๋งค๊ฐ๋ณ์๊ฐ ๊ฐฑ์ ๋๊ธฐ ์ ์ ๊ฒฝ๋ง์ ํตํด ์ ํ๋ ๋ฐ์ดํฐ ์ํ์ ์
- ํ์ต๋ฅ (learning rate) - ๊ฐ ๋ฐฐ์น/์ํญ์์ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๋น์จ. ๊ฐ์ด ์์์๋ก ํ์ต ์๋๊ฐ ๋๋ ค์ง๊ณ , ๊ฐ์ด ํฌ๋ฉด ํ์ต ์ค ์์ธกํ ์ ์๋ ๋์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
learning_rate = 1e-3
batch_size = 64
epochs = 5
์ต์ ํ ๋จ๊ณ(Optimization Loop)
ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ ๋ค์๋ ์ต์ ํ ๋จ๊ณ๋ฅผ ํตํด ๋ชจ๋ธ์ ํ์ตํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
์ต์ ํ ๋จ๊ณ์ ๊ฐ ๋ฐ๋ณต(iteration)์ Epoch(์ํญ) ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค
- ํ๋์ ์ํญ์ ๋๊ฐ์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค
- ํ์ต ๋จ๊ณ(train loop) - ํ์ต์ฉ ๋ฐ์ดํฐ์ ์ ๋ฐ๋ณต(iterate)ํ๊ณ ์ต์ ์ ๋งค๊ฐ๋ณ์๋ก ์๋ ดํฉ๋๋ค.
- ๊ฒ์ฆ / ํ ์คํธ ๋จ๊ณ(validation / test loop) - ๋ชจ๋ธ ์ฑ๋ฅ์ด ๊ฐ์ ๋๊ณ ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ ์คํธ ๋ฐ์ดํฐ์ ์ ๋ฐ๋ณต(iterate)ํฉ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ํ์ต ๋จ๊ณ(training loop)์์ ์ผ์ด๋๋ ๋ช ๊ฐ์ง ๊ฐ๋ ๋ค์ ๊ฐ๋ตํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ค ํจ์ (Loss Function)
ํ์ต์ฉ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ฉด, ํ์ต๋์ง ์์ ์ ๊ฒฝ๋ง์ ์ ๋ต์ ์ ๊ณตํ์ง ์์ ํ๋ฅ ์ด ๋์ต๋๋ค.
- ์์ค ํจ์(loss function)๋ ํ๋ํ ๊ฒฐ๊ณผ์ ์ค์ ๊ฐ ์ฌ์ด์ ํ๋ฆฐ ์ ๋(degree of dissimilarity)๋ฅผ ์ธก์ ํ๋ฉฐ, ํ์ต ์ค์ ์ด ๊ฐ์ ์ต์ํํ๋ ค๊ณ ํฉ๋๋ค.
- ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ํ์ ์ ๋ ฅ์ผ๋ก ๊ณ์ฐํ ์์ธก๊ณผ ์ ๋ต(label)์ ๋น๊ตํ์ฌ ์์ค(loss)์ ๊ณ์ฐํฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ์์คํจ์์๋ ํ๊ท ๋ฌธ์ (regression task)์ ์ฌ์ฉํ๋ nn.MSELoss (ํ๊ท ์ ๊ณฑ ์ค์ฐจ(MSE; Mean Square Error))๋ ๋ถ๋ฅ(classification)์ ์ฌ์ฉํ๋ nn.NLLLoss (์์ ๋ก๊ทธ ์ฐ๋(Negative Log Likelihood)), ๊ทธ๋ฆฌ๊ณ nn.LogSoftmax์ nn.NLLLoss๋ฅผ ํฉ์น nn.CrossEntropyLoss ๋ฑ์ด ์์ต๋๋ค.
- ๋ชจ๋ธ์ ์ถ๋ ฅ ๋ก์ง(logit)์ nn.CrossEntropyLoss์ ์ ๋ฌํ์ฌ ๋ก์ง(logit)์ ์ ๊ทํํ๊ณ ์์ธก ์ค๋ฅ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
# ์์ค ํจ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
loss_fn = nn.CrossEntropyLoss()
- ํ๊ท ๋ฌธ์ (regression task)์ ์ฌ์ฉํ๋ nn.MSELoss ๊ณต์๋ฌธ์ ์ ๋๋ค.
MSELoss — PyTorch 2.4 documentation
Shortcuts
pytorch.org
- nn.NLLLoss (์์ ๋ก๊ทธ ์ฐ๋(Negative Log Likelihood)) ๊ณต์๋ฌธ์ ์ ๋๋ค.
NLLLoss — PyTorch 2.4 documentation
Shortcuts
pytorch.org
- nn.CrossEntropyLoss ๊ณต์๋ฌธ์ ์ ๋๋ค.
CrossEntropyLoss — PyTorch 2.4 documentation
Shortcuts
pytorch.org
์ตํฐ๋ง์ด์ (Optimizer)
์ต์ ํ๋ ๊ฐ ํ์ต ๋จ๊ณ์์ ๋ชจ๋ธ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ชจ๋ธ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค.
์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด ๊ณผ์ ์ด ์ํ๋๋ ๋ฐฉ์(์ฌ๊ธฐ์์๋ ํ๋ฅ ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ(SGD; Stochastic Gradient Descent))์ ์ ์ํฉ๋๋ค.
- ์ต์ ํ๋ ๊ฐ ํ์ต ๋จ๊ณ์์ ๋ชจ๋ธ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ชจ๋ธ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค.
- ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด ๊ณผ์ ์ด ์ํ๋๋ ๋ฐฉ์(์ฌ๊ธฐ์์๋ ํ๋ฅ ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ(SGD; Stochastic Gradient Descent))์ ์ ์ํฉ๋๋ค.
- ๋ชจ๋ ์ต์ ํ ์ ์ฐจ(logic)๋ optimizer ๊ฐ์ฒด์ ์บก์ํ(encapsulate)๋ฉ๋๋ค.
- ์ฌ๊ธฐ์๋ SGD ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, PyTorch์๋ ADAM์ด๋ RMSProp๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ์์ ๋ ์ ๋์ํ๋ ๋น์ํ ์ตํฐ๋ง์ด์ ๊ฐ ์์ต๋๋ค.
- ํ์ตํ๋ ค๋ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์์ ํ์ต๋ฅ (learning rate) ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ๋ฑ๋กํ์ฌ ์ตํฐ๋ง์ด์ ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
ํ์ต ๋จ๊ณ(loop)์์ ์ต์ ํ๋ ์ธ๋จ๊ณ๋ก ์ด๋ค์ง๋๋ค.
- optimizer.zero_grad()๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ธ ๋งค๊ฐ๋ณ์์ ๋ณํ๋๋ฅผ ์ฌ์ค์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณํ๋๋ ๋ํด์ง๊ธฐ(add up) ๋๋ฌธ์ ์ค๋ณต ๊ณ์ฐ์ ๋ง๊ธฐ ์ํด ๋ฐ๋ณตํ ๋๋ง๋ค ๋ช ์์ ์ผ๋ก 0์ผ๋ก ์ค์ ํฉ๋๋ค.
- loss.backwards()๋ฅผ ํธ์ถํ์ฌ ์์ธก ์์ค(prediction loss)์ ์ญ์ ํํฉ๋๋ค.
- PyTorch๋ ๊ฐ ๋งค๊ฐ๋ณ์์ ๋ํ ์์ค์ ๋ณํ๋๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ณํ๋๋ฅผ ๊ณ์ฐํ ๋ค์๋ optimizer.step()์ ํธ์ถํ์ฌ ์ญ์ ํ ๋จ๊ณ์์ ์์ง๋ ๋ณํ๋๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํฉ๋๋ค.
- ์๋๋ Optimizer ๊ด๋ จ ๊ณต์๋ฌธ์ ์ ๋๋ค.
torch.optim — PyTorch 2.4 documentation
torch.optim torch.optim is a package implementing various optimization algorithms. Most commonly used methods are already supported, and the interface is general enough, so that more sophisticated ones can also be easily integrated in the future. How to us
pytorch.org
์ ์ฒด ์ฝ๋ ๊ตฌํ
์ต์ ํ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ฌ ์ํํ๋ train_loop์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ test_loop๋ฅผ ์ ์ํ์์ต๋๋ค.
def train_loop(dataloader, model, loss_fn, optimizer):
size = len(dataloader.dataset)
# ๋ชจ๋ธ์ ํ์ต(train) ๋ชจ๋๋ก ์ค์ ํฉ๋๋ค - ๋ฐฐ์น ์ ๊ทํ(Batch Normalization) ๋ฐ ๋๋กญ์์(Dropout) ๋ ์ด์ด๋ค์ ์ค์ํฉ๋๋ค.
# ์ด ์์์์๋ ์์ด๋ ๋์ง๋ง, ์ถ๊ฐํด๋์์ต๋๋ค.
model.train()
for batch, (X, y) in enumerate(dataloader):
# ์์ธก(prediction)๊ณผ ์์ค(loss) ๊ณ์ฐ
pred = model(X)
loss = loss_fn(pred, y)
# ์ญ์ ํ
loss.backward()
optimizer.step()
optimizer.zero_grad()
if batch % 100 == 0:
loss, current = loss.item(), batch * batch_size + len(X)
print(f"loss: {loss:>7f} [{current:>5d}/{size:>5d}]")
def test_loop(dataloader, model, loss_fn):
# ๋ชจ๋ธ์ ํ๊ฐ(eval) ๋ชจ๋๋ก ์ค์ ํฉ๋๋ค - ๋ฐฐ์น ์ ๊ทํ(Batch Normalization) ๋ฐ ๋๋กญ์์(Dropout) ๋ ์ด์ด๋ค์ ์ค์ํฉ๋๋ค.
# ์ด ์์์์๋ ์์ด๋ ๋์ง๋ง, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ํด ์ถ๊ฐํด๋์์ต๋๋ค.
model.eval()
size = len(dataloader.dataset)
num_batches = len(dataloader)
test_loss, correct = 0, 0
# torch.no_grad()๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ ์ ๋ณํ๋(gradient)๋ฅผ ๊ณ์ฐํ์ง ์๋๋ก ํฉ๋๋ค.
# ์ด๋ requires_grad=True๋ก ์ค์ ๋ ํ
์๋ค์ ๋ถํ์ํ ๋ณํ๋ ์ฐ์ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ํ ์ค์ฌ์ค๋๋ค.
with torch.no_grad():
for X, y in dataloader:
pred = model(X)
test_loss += loss_fn(pred, y).item()
correct += (pred.argmax(1) == y).type(torch.float).sum().item()
test_loss /= num_batches
correct /= size
print(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")
- ์์ค ํจ์์ ์ตํฐ๋ง์ด์ ๋ฅผ ์ด๊ธฐํํ๊ณ train_loop์ test_loop์ ์ ๋ฌํฉ๋๋ค.
- ๋ชจ๋ธ์ ์ฑ๋ฅ ํฅ์์ ์์๋ณด๊ธฐ ์ํด ์์ ๋กญ๊ฒ ์ํญ(epoch) ์๋ฅผ ์ฆ๊ฐ์์ผ ๋ณผ ์ ์์ต๋๋ค.
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
epochs = 10
for t in range(epochs):
print(f"Epoch {t+1}\n-------------------------------")
train_loop(train_dataloader, model, loss_fn, optimizer)
test_loop(test_dataloader, model, loss_fn)
print("Done!")
Epoch 1
-------------------------------
loss: 2.305544 [ 64/60000]
loss: 2.296132 [ 6464/60000]
loss: 2.269240 [12864/60000]
loss: 2.265443 [19264/60000]
loss: 2.257847 [25664/60000]
loss: 2.210369 [32064/60000]
loss: 2.225546 [38464/60000]
loss: 2.182035 [44864/60000]
loss: 2.192158 [51264/60000]
loss: 2.160539 [57664/60000]
Test Error:
Accuracy: 38.8%, Avg loss: 2.149502
Epoch 2
-------------------------------
loss: 2.165807 [ 64/60000]
loss: 2.152438 [ 6464/60000]
loss: 2.086566 [12864/60000]
loss: 2.106932 [19264/60000]
loss: 2.064639 [25664/60000]
loss: 1.981671 [32064/60000]
loss: 2.020240 [38464/60000]
loss: 1.928579 [44864/60000]
loss: 1.948187 [51264/60000]
loss: 1.877932 [57664/60000]
Test Error:
Accuracy: 52.7%, Avg loss: 1.867320
Epoch 3
-------------------------------
loss: 1.906202 [ 64/60000]
loss: 1.871369 [ 6464/60000]
loss: 1.746385 [12864/60000]
loss: 1.800164 [19264/60000]
loss: 1.699125 [25664/60000]
loss: 1.632668 [32064/60000]
loss: 1.670603 [38464/60000]
loss: 1.561565 [44864/60000]
loss: 1.602784 [51264/60000]
loss: 1.505543 [57664/60000]
Test Error:
Accuracy: 57.2%, Avg loss: 1.510549
Epoch 4
-------------------------------
loss: 1.583206 [ 64/60000]
loss: 1.545566 [ 6464/60000]
loss: 1.391972 [12864/60000]
loss: 1.475445 [19264/60000]
loss: 1.366858 [25664/60000]
loss: 1.349078 [32064/60000]
loss: 1.376894 [38464/60000]
loss: 1.291643 [44864/60000]
loss: 1.333184 [51264/60000]
loss: 1.248018 [57664/60000]
Test Error:
Accuracy: 62.3%, Avg loss: 1.258796
Epoch 5
-------------------------------
loss: 1.338726 [ 64/60000]
loss: 1.319980 [ 6464/60000]
loss: 1.150760 [12864/60000]
loss: 1.264624 [19264/60000]
loss: 1.147503 [25664/60000]
loss: 1.162498 [32064/60000]
loss: 1.192891 [38464/60000]
loss: 1.120305 [44864/60000]
loss: 1.161247 [51264/60000]
loss: 1.091846 [57664/60000]
Test Error:
Accuracy: 64.2%, Avg loss: 1.099003
Epoch 6
-------------------------------
loss: 1.172135 [ 64/60000]
loss: 1.174778 [ 6464/60000]
loss: 0.989002 [12864/60000]
loss: 1.128839 [19264/60000]
loss: 1.007943 [25664/60000]
loss: 1.032277 [32064/60000]
loss: 1.074430 [38464/60000]
loss: 1.006675 [44864/60000]
loss: 1.046682 [51264/60000]
loss: 0.989977 [57664/60000]
Test Error:
Accuracy: 65.4%, Avg loss: 0.992776
Epoch 7
-------------------------------
loss: 1.053729 [ 64/60000]
loss: 1.078095 [ 6464/60000]
loss: 0.875616 [12864/60000]
loss: 1.035629 [19264/60000]
loss: 0.916670 [25664/60000]
loss: 0.937665 [32064/60000]
loss: 0.994427 [38464/60000]
loss: 0.930131 [44864/60000]
loss: 0.966351 [51264/60000]
loss: 0.920454 [57664/60000]
Test Error:
Accuracy: 66.6%, Avg loss: 0.919069
Epoch 8
-------------------------------
loss: 0.965864 [ 64/60000]
loss: 1.009843 [ 6464/60000]
loss: 0.793096 [12864/60000]
loss: 0.968506 [19264/60000]
loss: 0.854228 [25664/60000]
loss: 0.867148 [32064/60000]
loss: 0.937596 [38464/60000]
loss: 0.877755 [44864/60000]
loss: 0.908159 [51264/60000]
loss: 0.870483 [57664/60000]
Test Error:
Accuracy: 68.0%, Avg loss: 0.865721
Epoch 9
-------------------------------
loss: 0.898012 [ 64/60000]
loss: 0.958372 [ 6464/60000]
loss: 0.730860 [12864/60000]
loss: 0.918205 [19264/60000]
loss: 0.809332 [25664/60000]
loss: 0.813669 [32064/60000]
loss: 0.894510 [38464/60000]
loss: 0.840718 [44864/60000]
loss: 0.864679 [51264/60000]
loss: 0.832418 [57664/60000]
Test Error:
Accuracy: 69.3%, Avg loss: 0.825300
Epoch 10
-------------------------------
loss: 0.843837 [ 64/60000]
loss: 0.917194 [ 6464/60000]
loss: 0.682222 [12864/60000]
loss: 0.879231 [19264/60000]
loss: 0.775033 [25664/60000]
loss: 0.772480 [32064/60000]
loss: 0.859712 [38464/60000]
loss: 0.813271 [44864/60000]
loss: 0.830852 [51264/60000]
loss: 0.801870 [57664/60000]
Test Error:
Accuracy: 70.6%, Avg loss: 0.793228
Done!
๋ ์์ธํ ๋ด์ฉ์ ๋ณด๊ณ ์ถ์ผ์๋ฉด ์๋ ๋งํฌ์ ๋ค์ด๊ฐ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์!
- Loss Function ๊ด๋ จ ๊ณต์๋ฌธ์
torch.nn — PyTorch 2.4 documentation
Shortcuts
pytorch.org
- Torch.Optimizer ๊ด๋ จ ๊ณต์๋ฌธ์
torch.optim — PyTorch 2.4 documentation
torch.optim torch.optim is a package implementing various optimization algorithms. Most commonly used methods are already supported, and the interface is general enough, so that more sophisticated ones can also be easily integrated in the future. How to us
pytorch.org
- Warmstart Training Model ๊ด๋ จ ๊ณต์๋ฌธ์
PyTorch์์ ๋ค๋ฅธ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ชจ๋ธ ์์ํ๊ธฐ(warmstart)
๋ชจ๋ธ์ ๋ถ๋ถ์ ์ผ๋ก ๋ถ๋ฌ์ค๊ฑฐ๋, ํน์ ๋ถ๋ถ์ ์ธ ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๋ ๊ฒ์ ํ์ต ์ ์ด(Transfer learning)๋ ๋ณต์กํ ๋ชจ๋ธ์ ์๋ก ํ์ตํ ๋ ์์ฃผ ์ ํ๋ ์๋๋ฆฌ์ค์ ๋๋ค. ํ์ต๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ๋ฉด ํ์ต
tutorials.pytorch.kr
'๐ฅ PyTorch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PyTorch] Checkpoint Model ์ ์ฅ & ๋ถ๋ฌ์ค๊ธฐ (0) | 2024.08.02 |
---|---|
[PyTorch] Model ์ ์ฅ & ๋ถ๋ฌ์ค๊ธฐ (0) | 2024.07.31 |
[PyTorch] Torch.Autograd๋ฅผ ์ด์ฉํ ์๋ ๋ฏธ๋ถ (0) | 2024.07.30 |
[PyTorch] Neural Network Model (์ ๊ฒฝ๋ง ๋ชจ๋ธ) ๊ตฌ์ฑํ๊ธฐ (0) | 2024.07.26 |
[PyTorch] Transform (๋ณํ) (0) | 2024.07.26 |