๋ฐ์ํ
โ ๏ธ ๋ณธ ๋ด์ฉ์ PyTorch Korea์ ๊ณต์ ๋ฌธ์์ ๊ธฐ๋ฐํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ์ ์๊ฒ์ด๋ ์ํด๋ฐ๋๋๋ค!
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์ ๋ฐํ ๊ณต์๋ฌธ์ ์ ๋๋ค. ์ด ๋ถ๋ถ์ ๋ฐํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ ๋์ค์ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
- ๋ชจ๋ธ์ ํ์ตํ ๋, ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ 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 ๊ณต์๋ฌธ์ ์ ๋๋ค.
- nn.NLLLoss (์์ ๋ก๊ทธ ์ฐ๋(Negative Log Likelihood)) ๊ณต์๋ฌธ์ ์ ๋๋ค.
- nn.CrossEntropyLoss ๊ณต์๋ฌธ์ ์ ๋๋ค.
์ตํฐ๋ง์ด์ (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 ๊ด๋ จ ๊ณต์๋ฌธ์ ์ ๋๋ค.
์ ์ฒด ์ฝ๋ ๊ตฌํ
์ต์ ํ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ฌ ์ํํ๋ 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.Optimizer ๊ด๋ จ ๊ณต์๋ฌธ์
- Warmstart Training Model ๊ด๋ จ ๊ณต์๋ฌธ์
๋ฐ์ํ
'๐ฅ 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 |