ํ์ํ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
import torch
import torch.nn as nn
import torch.nn.functional as F # ๋ชจ๋
๋ชจ๋ธ ์ ์ธ
model = torch.nn.Linear(1,1)
ํ์ดํ ์น๋ Define by run๋ฐฉ์์ผ๋ก ์คํ๋๋ฏ๋ก ์ ์ฐํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. Define by run์ด๋ ์ฐ์ฐ ์ ์์ ๋์์ ๊ฐ์ด ์ด๊ธฐํ ๋๋ ๋ฐฉ์์ด๋ฉฐ, ๋ฐ๋ฉด์ Define and run ๋ฐฉ์์ ๋จผ์ ๋ชจ๋ธ์ ๋ง๋ค์ด์ฃผ๊ณ ๊ฐ์ ๋ชจ๋ ๋ฐ๋ก ๋ฃ์ด์ฃผ๊ฒ ๋ฉ๋๋ค.
class LinearRegressionModel(torch.nn.Module): # torch.nn.Module์ ์์๋ฐ์
def __init__(self):
super().__init__() # ๋ค๋ฅธ ํด๋์ค์ ์์ฑ ๋ฐ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ ์ด
self.linear = torch.nn.Linear(1,1) # input_dim 1, output_dim 1
def forward(self, x):
return self.linear(x)
์ผ๋จ ๋จ์ํ๊ฒ ํ๊ธฐ ์ํด์ input_dim๋ 1๋ก ์ฃผ๊ณ , ์ถ๋ ฅ์ธต๋ 1๋ก ์ฃผ์์ด์.
model = LinearRegressionModel()
model = torch.nn.Linear(3,1)
class MultivariateLinearRegressionModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.linear = torch.nn.Linear(3,1)
def forward(self, x):
return self.linear(x)
๋ชจ๋ธ์ ๋ถ๋ฌ์ ์ตํฐ๋ง์ด์ ์ค์ ํด์ฃผ๊ธฐ
model= MultivariateLinearRegressionModel()
์ตํฐ๋ง์ด์ ๋ SGD๋ฅผ ์ฌ์ฉํ๊ณ , lr์ 0.00001๋ก ์ฃผ์์ต๋๋ค.
optimizer = torch.optim.SGD(model.parameters(), lr = 1e-5)
ํ์ฑํ ํจ์์, loss๋ฑ์ ๋ฃ์ด์ฃผ๊ฒ ๋ฉ๋๋ค.
nb_epochs = 2000
for epoch in range(1,nb_epochs+1):
# H(x) ๊ณ์ฐ
prediction = model(x_train)
# cost ๊ณ์ฐ
cost = F.mse_loss(prediction,y_train)
# gradient๋ฅผ 0์ผ๋ก ์ด๊ธฐํ
optimizer.zero_grad()
# ๋น์ฉํจ์๋ฅผ ๋ฏธ๋ถํ์ฌ gradient ๊ณ์ฐ
cost.backward()
# W, b๋ฅผ ์
๋ฐ์ดํธ
optimizer.step()
if epoch % 100 == 0:
print('Epoch {:4d} / {} Cost: {:.6f}'.format(epoch, nb_epochs, cost.item()
))
ํ์ดํ ์น์์๋ ๊ฐ์ค์น๋ฅผ ์ด๊ธฐํํด์ฃผ๋ ๊ณผ์ ์ด ๋ฐ๋์ ํ์ํฉ๋๋ค!
gradient๋ฅผ ์ด๊ธฐํํด์ฃผ๋๋ฐ์๋ ์ถํ์ ์ค๋ช
๋๋ฆฌ๋๋ก ํ ๊ฒ์!
์ฐธ๊ณ ๋ฌธํ: PyTorch๋ก ์์ํ๋ ๋ฅ ๋ฌ๋ ์ ๋ฌธ