[CH04] 02. nn.Module로 구현하는 로지스틱 회귀

SoYeong Gwon·2022년 6월 27일
0

DeepLearning Introduction

목록 보기
6/12
post-thumbnail
  • 로지스틱 회귀의 가설식은 H(x)=sigmoid(Wx+b)H(x) = sigmoid(Wx+b)
  • pytorch에서 nn.Sigmoid()를 로지스틱 회귀

1. 파이토치의 nn.Linear와 nn.Sigmoid로 로지스틱 회귀 구현하기

01. 패키지 선언 및 초기화

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
torch.manual_seed(1)

02. 학습 데이터 선언

x_data = [[1, 2], [2, 3], [3, 1], [4, 3], [5, 3], [6, 2]]
y_data = [[0], [0], [0], [1], [1], [1]]
x_train = torch.FloatTensor(x_data)
y_train = torch.FloatTensor(y_data)

03. nn.module을 활용한 모델 선언

  • nn.Sequential()nn.Module 층을 차례로 쌓을 수 있음.
  • 쉽게 말해 nn.SequentialWx+bWx+b와 같은 수식과 시그모이드 함수 등 여러 함수를 연결해주는 역할
model = nn.Sequential(
   nn.Linear(2, 1), # input_dim = 2, output_dim = 1
   nn.Sigmoid() # 출력은 시그모이드 함수를 거친다
)
# W와 b는 랜덤 초기화 
model(x_train)

04. optimizer 설정 및 학습

# optimizer 설정
optimizer = optim.SGD(model.parameters(), lr=1)

nb_epochs = 1000
for epoch in range(nb_epochs + 1):

    # H(x) 계산
    hypothesis = model(x_train)

    # cost 계산
    cost = F.binary_cross_entropy(hypothesis, y_train)

    # cost로 H(x) 개선
    optimizer.zero_grad()
    cost.backward()
    optimizer.step()

    # 20번마다 로그 출력
    if epoch % 10 == 0:
        prediction = hypothesis >= torch.FloatTensor([0.5]) # 예측값이 0.5를 넘으면 True로 간주
        correct_prediction = prediction.float() == y_train # 실제값과 일치하는 경우만 True로 간주
        accuracy = correct_prediction.sum().item() / len(correct_prediction) # 정확도를 계산
        print('Epoch {:4d}/{} Cost: {:.6f} Accuracy {:2.2f}%'.format( # 각 에포크마다 정확도를 출력
            epoch, nb_epochs, cost.item(), accuracy * 100,
        ))

05. 학습 결과 확인

model(x_train)
  • 0.5를 넘으면 True, 그보다 낮으면 False로 간주
  • 실제값은 [0,0,0,1,1,1]로, [False,False,False,True,True,True]로 해당됨
print(list(model.parameters()))
[Parameter containing:
tensor([[3.2534, 1.5181]], requires_grad=True), Parameter containing:
tensor([-14.4839], requires_grad=True)]

2. 인공신경망으로 표현되는 로지스틱 회귀

  • 로지스틱회귀는 인공신경망으로 간주할 수 있음.

  • 위의 인공신경망 그림에서 검은 화살표는 가중치(WW), 회색 화살표는 편향(bb)이 곱해짐
  • 출력하기 전에 시그모이드 함수를 지나게됨.
  • 위 사진의 인공신경망은 다중 로지스틱 회귀를 표현하고 있음.
  • H(x)=sigmoid(x1w1+x2w2+b)H(x)=sigmoid(x_1w_1+x_2w_2+b)

0개의 댓글