본 게시글은 다음 링크(https://wikidocs.net/book/2788)의 wiki docs를 참고하여 작성되었습니다.
# 모델을 선언 및 초기화
import torch
import torch.nn as nn
model=nn.Linear(1,1)
class LinearRegressionModel(nn.Module): #torch.nn.Module을 상속받는 파이썬 클래스
def __init__(self):
super().__init__()
self.linear=nn.Linear(1,1) #단순선형회귀
def forward(self,x):
return self.linear(x)
model=LinearRegressionModel()
super()
함수를 불러 nn.Module
클래스의 속성을 상속받아 초기화forward()
함수는 모델이 학습데이터를 입력받아서 forward 연산을 진행model
객체를 데이터와 함께 호출하면 자동으로 실행됨.import torch
import torch.nn as nn
model=nn.Linear(3,1)
class MultivariateLinearRegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.linear=nn.Linear(3,1)
def forward(self,x):
return self.linear(x)
model=MultivariateLinearRegressionModel()
import torch
import torch.nn as nn
import torch.nn.functional as F
torch.manual_seed(1)
x_train=torch.FloatTensor([[1],[2],[3]])
y_train=torch.FloatTensor([[2],[4],[6]])
class LinearRegressionModel(nn.Module): #torch.nn.Module을 상속받는 파이썬 클래스
def __init__(self):
super().__init__()
self.linear=nn.Linear(1,1) #단순선형회귀
def forward(self,x):
return self.linear(x)
model=LinearRegressionModel()
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)
nb_epochs=2000
for epoch in range(nb_epochs+1):
#H(x)계산
prediction=model(x_train)
#cost 계산
cost=F.mse_loss(prediction,y_train)
#cost로 H(x) 개선 및 update
optimizer.zero_grad()
cost.backward()
optimizer.step()
if epoch%100==0:
print('Epoch {:4d}/{}, Cost:{:.6f}'.format(epoch,nb_epochs,cost.item()))
Epoch 0/2000, Cost:13.103541
Epoch 100/2000, Cost:0.002791
...
Epoch 1800/2000, Cost:0.000001
Epoch 1900/2000, Cost:0.000000
Epoch 2000/2000, Cost:0.000000
import torch
import torch.nn as nn
import torch.nn.functional as F
torch.manual_seed(1)
x_train=torch.FloatTensor([[73,80,75],
[93,88,93],
[89,91,90],
[96,98,100],
[73,66,70]])
y_train=torch.FloatTensor([[152],[185],[180],[196],[142]])
class MultivariateLinearRegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.linear=nn.Linear(3,1)
def forward(self,x):
return self.linear(x)
model=MultivariateLinearRegressionModel()
optimizer=torch.optim.SGD(model.parameters(),lr=1e-5)
nb_epochs=2000
for epoch in range(nb_epochs+1):
#H(x) 계산
prediction=model(x_train)
#cost 계산
cost=F.mse_loss(prediction,y_train)
#cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()
if epoch%100==0:
print('Epoch {:4d}/{} Cost:{:.6f}'.format(epoch,nb_epochs,cost.item()))
Epoch 0/2000 Cost:31667.599609
Epoch 100/2000 Cost:0.225993
...
Epoch 1900/2000 Cost:0.200634
Epoch 2000/2000 Cost:0.199770