관리 메뉴

ComputerVision Jack

PyTorch Lecture 05 : Linear Regression in the PyTorch way 본문

DeepLearning/Pytorch_ZeroToAll

PyTorch Lecture 05 : Linear Regression in the PyTorch way

JackYoon 2020. 10. 7. 16:56
반응형

PyTorch Rhythm

이번 강의에선 파이토치를 통해 선형 모델 학습을 진행하셨습니다. 파이토치 또한 tensorflow 라이브러리 처럼 학습 관련한 데이터와 모델을 정의하고, 손실 함수를 최적화 시키면서 학습을 진행 시키는 방향으로 나아갑니다.

  1. Design your model using class with Variables 
  2. Construct loss and optimizer
  3. Training cycle

[05.Linear_regression.py]

from torch import nn

import torch

from torch import tensor

# torch 관련한 라이브러리를 import 합니다. network와 tensor 사용을 위한 과정입니다.

 

x_data = tensor([[1.0], [2.0], [3.0]])

y_data = tensor([[2.0], [4.0], [6.0]])

# 사용할 데이터를 준비합니다. 데이터 shape은 [3 x 1] tensor 입니다. 각각 x와 y 데이터가 1대1로 매칭됩니다.

 

class Model(nn.Module):

    def __init__(self):

        super(Model, self).__init__()

        self.linear = torch.nn.Linear(1, 1)

 

    def forward(self, x):

        y_pred = self.linear(x)

        return y_pred

# 우리가 사용할 모델을 클래스화하여 생성합니다.

생성자를 통해 linear 모델을 생성하고, linear 모델에 대한 forward 연산을 클래스 내부에 정의해 놓습니다.

 

model = Model()

# 정의한 모델 클래스에 대한 객체를 생성합니다.

 

criterion = torch.nn.MSELoss(reduction = 'sum')

optimizer = torch.optim.SGD(model.parameters(), lr= 0.01)

# 그 다음 오차 함수를 설정합니다. MSE 오차를 사용합니다.

그 다음 SGD 알고리즘을 통해 MSE 오차에 대해 learning_rate 0.01로 최적화 합니다.

 

for epoch in range(500):

    y_pred = model(x_data)

 

    loss = critierion(y_pred, y_data)

    print(f'Epoch : {epoch} | Loss : {loss.item()}')

 

    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

# 500번의 반복을 통해 학습을 진행합니다.

우선 model에 x_data를 넣어 y_pred를 추출합니다. forward() 방식

그렇게 결과로 나온 y_pred와 y_data를 비교하여 오차를 추출합니다. 또한 반복 횟수에 대한 오차를 출력합니다.

아마 학습이 진행 될 수록 오차가 감소될 것입니다.

 

그다음 backward() 방식으로 최적화를 진행합니다.

 

hour_var = tensor([[4.0]])

y_pred = model(hour_val)

print('Prediction (after training)', 4, model(hour_var).data[0][0].item())

# 학습된 모델에 이제 예측을 통한 변수를 던져줍니다. 아마 4.0을 모델에 입력하면 8.0에 근접한 갑이 추출될 것입니다.

Pytorch Linear Model result

 

 

 

반응형
Comments