💻 본업(컴공생) 이야기/파이토치 공부 이야기

[파이토치 (PyTorch)] 5. Linear Regression in PyTorch way

st오리🐥 2025. 1. 7. 17:46
728x90
반응형
SMALL

 

 

선형 회귀 꿀팁!!  파이토치리듬 🚀

-> 파이토치로 딥러닝 모델을 만들 때 꼭 지켜야 할 '3단계 핵심 흐름' 

(선형 회귀 뿐만아니라, 복잡한딥러닝 모델에도 모두 적용된다.)

 

 

<파이토치 리듬 (공식용어x)>

1) 모델에서 쓸 클래스와 변수 설정하기 - (설계)

-> 데이터가 입력되었을 때, 어떤 수학적 연산을 거쳐 출력할지 결정

 

2) 파이토치 api를 사용하여 loss와 optimizer 구성하기 - (목표 설정)

-> 모델이 얼마나 잘 예측하는지 평가하고 잘못된 부분을 어떻게 수정할지 결정하는 도구 필요!

-> 목표점수를 정하고, 목표에 달성하기 위해 그 도구를 준비하는 단계

-> Loss function: 예측값과 실제값의 차이를 측정하고 그 오차를 최소화하기 위함

-> Optimizer: loss를 줄이기 위해 가중치과 편향을 조정 (ex 경사하강법 SGD)

 

3) training cycle (forward, backward, update) - (학습 반복)

 

https://colab.research.google.com/drive/1SnVpPpvXDhiTakux8fYtDgydOJwj2Bu2?usp=sharing

 

Linear Regression

Colab notebook

colab.research.google.com

 

# data : 데이터 정의 - 입력과 출력 y=2x

x_data = Variable(torch.Tensor([[1.0],[2.0],[3.0]]))
y_data = Variable(torch.Tensor([[2.0],[4.0],[6.0]]))
# 1) 모델에서 쓸 클래스와 변수 설정하기

'''
torch.nn.Module 상속 -> 신경망 모델 클래스 정의
Linear(1,1) -> 입출력 1씩 선형레이어 형성

'''

class Model(torch.nn.Module):            # 초기화
  def __init__(self):
    super(Model,self).__init__()
    self.linear = torch.nn.Linear(1,1) # one in and one out

  def forward(self, x): #예측값 계산 
    y_pred = self.linear(x)
    return y_pred

#our model

model = Model()

 

 

 

# 2)  loss와 optimizer 구성하기

criterion = torch.nn.MSELoss(size_average = False) # 평균 제곱 오차 손실 함수
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01) # 확률적 경사하강법 (SGD) / 학습률 0.01 / 모델의 가중치와 편향 최적화

 

# 3) Training : forward, loss, backward, step

#training loop
for epoch in range(500):

  #Forward pass : compute predicted y by passing x to the model : 1) 예측값 계산

  y_pred = model(x_data)

  #compute and print loss : 2) loss 계산
  loss = criterion(y_pred, y_data)
  print(epoch, loss.item())

  #zero gradients, perform a backward pass, and update the weights : 역전파로 기울기 계산
  optimizer.zero_grad()  # 이전 기울기 초기화
  loss.backward() # 기울기 계산
  optimizer.step() #경사하강법으로 가중치 업데이트
# After training 

hour_var = Variable(torch.Tensor([[4.0]])) # 입력값
print("predict (after training)", 4, model.forward(hour_var).data[0][0]) #예측값 계산
728x90
반응형
LIST