슬.공.생

BoostCourse(DL)(week2)-Sequential model(class) 본문

study/DeepLearning

BoostCourse(DL)(week2)-Sequential model(class)

AGT (goh9510@naver.com) 2022. 8. 1. 22:04

본 포스팅은 부스트 코스의 [ 파이토치로 시작하는 딥러닝 기초 ] 와 [ Pytorch로 시작하는 딥러닝 입문 ] 의 내용을 통해 학습한 내용입니다.

 

파이토치로 시작하는 딥러닝 기초

부스트코스 무료 강의

www.boostcourse.org

 

 

PyTorch로 시작하는 딥 러닝 입문

이 책은 딥 러닝 프레임워크 PyTorch를 사용하여 딥 러닝에 입문하는 것을 목표로 합니다. 이 책은 2019년에 작성된 책으로 비영리적 목적으로 작성되어 출판 ...

wikidocs.net


딥러닝의 입력이 다양한 경우, 일반적으로는 model을 선언할 시 class 를 사용하여 model을 구성하게된다.

앞서 선형 회귀의 경우에서 class를 이용하여 model을 선언하였었다.

 

로지스틱 회귀의 경우도 선형회귀와 마찬가지로 다중 입력을 받을경우 class로 선언이 가능하다.

 

 

로지스틱 회귀에는 위의 hypothesis가 사용되는데 이때 linear 식을 sigmoid 함수의 입력으로써 사용하게 된다.

따라서 로지스틱 회귀에 사용되는 class는 아래와 같이 순차적인 구조를 가지게된다. 

W = torch.zeros((2, 1), requires_grad=True)
b = torch.zeros((1), requires_grad=True)

class LogisticRegressionModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(2, 1)
        self.sigmoid = nn.Sigmoid()
        
    def forward(self, x):
        return self.sigmoid(self.linear(x))

이와 같이 선형함수가 sigmoid 함수의 입력으로 들어가게 된다.

 


 

이것 외에도 class로 model을 선언하는 경우에 model.을 통해 객체에 접근하는 것으로 코드를 좀더 간단하게 만들 수 있다.

model = LogisticRegressionModel()

optimizer = optim.SGD(model.parameters(), lr = 1)
#optimizer = optim.SGD([W, b], lr = 1)

optimizer에 Weights 와 bias를 전달할 때 model 객체로부터 바로 값을 가져오게 된다. list(model.parameters())를 통해 출력할 수 있다.

 

 


hypothesis 또한 간단하게 표현할 수 있다. 

로지스틱 회귀의 cost함수의경우 cross_entropy 함수를 사용하고 import torch.nn.functional as F 을 통해 cost함수를 간단하게 표현할 수 있다.

nb_epochs = 1000

for epoch in range(nb_epochs+1):
    
    
  # hypothesis = 1 / (1 + torch.exp(-(x_train.matmul(W) + b)))
    hypothesis = model(x_train)
    
  # cost = -( (y_train)*torch.log(hypothesis) + 
           # (1 - y_train)*torch.log(1 - hypothesis)).mean()
    cost = F.binary_cross_entropy(hypothesis, y_train)
    
    optimizer.zero_grad()
    cost.backward()
    optimizer.step()

 

Comments