

https://tutorials.pytorch.kr/beginner/basics/optimization_tutorial.html
import random
# randomness(๋ฌด์์ ์์ฑ)ํ๋ ๊ฐ๋ค์ seed๋ก ํตํด ๊ณ ์ ์ํฌ ์ ์์
seed = 7777
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
x = torch.tensor([
[0., 0.],
[0., 1.],
[1., 0.],
[1., 1.]
])
y = torch.tensor([0, 1, 1, 0])
print(x.shape, y.shape)
from torch import nn
class Model(nn.Module):
def __init__(self, d, d_prime):
super().__init__()
self.layer1 = nn.Linear(d, d_prime) #์
๋ ฅ -> ์๋์ธต
self.layer2 = nn.Linear(d_prime, 1) #y์ ํน์ฑ์ ๊ฐ์
self.act = nn.ReLU()
def forward(self, x):
# x: (n, d)
x = self.layer1(x) # (n, d_prime) ์๋์ธต
x = self.act(x) # (n, d_prime) ํ์ฑํ ํจ์ ์ ์ฉ
x = self.layer2(x) # (n, 1)
return x
model = Model(2, 10) //model(x์ ํน์ฑ ๊ฐ์, ์๋์ถฉ์ ๋
ธ๋ ์)
์์ ํ ์ค๋ช
self.layer1(x) โ ์ ๋ ฅ๊ฐ์ ์๋์ธต์ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ณํํด์ ํ์ต ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ก ๋ง๋๋ ์์
์ ๋ ฅ๊ฐ (4,2)์ 10์ฐจ์ ํ๋ ฌ๊ณฑ โ (4, 10)
self.act(x) โ ReLU : ์์๋ฉด ๊ทธ๋๋ก, ์์๋ฉด 0 ์ฒ๋ฆฌ. ๊ฒฐ๊ณผ์ shape๋ ๋ณํ์ง ์์ (4,10)
self.layer2(x) โ ์์ธก ๊ฐ์ ๋ง๋ค๊ธฐ ์ํด 1์ฐจ์ ํ๋ ฌ๊ณฑํด์ 1์ฐจ์์ผ๋ก ๋ณํ
์ต์ ํ ํจ์(๊ฒฝ์ฌํ๊ฐ๋ฒ) ์ค์
from torch.optim import SGD
optimizer = SGD(model.parameters(), lr=0.1)
def train(n_epochs, model, optimizer, x, y):
for e in range(n_epochs):
model.zero_grad()
y_pred = model(x)
loss = (y_pred[:, 0] - y).pow(2).sum()
loss.backward()
optimizer.step()
print(f"Epoch {e:3d} | Loss: {loss}")
return model
n_epochs = 100
model = train(n_epochs, model, optimizer, x, y)
print(model(x))
print(y)
tensor([[0.0208],
[1.0484],
[1.0156],
[0.0496]], grad_fn=<AddmmBackward0>)
tensor([0, 1, 1, 0])