크크루쿠쿠

Pytorch AutoGrad & Optimizer 본문

DeepLearning/부스트캠프 AI Tech

Pytorch AutoGrad & Optimizer

JH_KIM 2021. 8. 18. 10:24

논문을 구현해 보자!

-> 반복의 연속이다!

 

Layer = Block

이러한 Layer(Block) 들의 반복이다.

 

torch.nn.Module

딥러닝을 구성하는 Layer의 base class

학습의 대상이 되는 parameter(weight) 정의

 

nn.Parameter

- Tensor 객체의 상속 객체

- nn.Module 에서 attribute 가 될 때 required_grad=True 가 지정되어서 학습 대상이 되는 Tensor  -> AutoGrad 대상

- 우리가 직접 지정할 일은 잘 없음.

ex) XW+b

class MyLiner(nn.Module):
    def __init__(self, in_features, out_features, bias=True):
        super().__init__()
        self.in_features = in_features
        self.out_features = out_features
        
        self.weights = nn.Parameter(
                torch.randn(in_features, out_features))
        
        self.bias = nn.Parameter(torch.randn(out_features))

    def forward(self, x : Tensor):
        return x @ self.weights + self.bias

 

Backward

- Layer에 있는 Parameter들의 미분을 수행

- Forward의 결과값과 실제값 간의 차이 (loss)에 대해 미분을 수행 후 Parameter 업데이트

for epoch in range(epochs):
    inputs = Variable(torch.from_numpy(x_train))
    labels = Variable(torch.from_numpy(y_train))

    # Clear gradient buffers because we don't want any gradient from previous epoch to carry forward, dont want to cummulate gradients
    optimizer.zero_grad()

    # get output from the model, given the inputs
    outputs = model(inputs)

    # get loss for the predicted output
    loss = criterion(outputs, labels)
    print(loss)
    # get gradients w.r.t to parameters
    loss.backward()

    # update parameters
    optimizer.step()

    print('epoch {}, loss {}'.format(epoch, loss.item()))

 

학습시 이러한 단계들을 반드시 거쳐야함.

backward 과정도 module 단에서 직접 설정 가능.

-> 미분과정을 직접 적어야 해서 힘듦.

def backward(self, x, yhat, y):
    ## compute backward
    self.grads["dw"] = (1/x.shape[1]) * torch.mm(x, (yhat - y).T)
    self.grads["db"] = (1/x.shape[1]) * torch.sum(yhat - y)
    
def optimize(self):
    ## optimization step
    self.w = self.w - self.lr * self.grads["dw"]
    self.b = self.b - self.lr * self.grads["db"]

 

'DeepLearning > 부스트캠프 AI Tech' 카테고리의 다른 글

Pytorch model 불러오기(transfer learning)  (0) 2021.08.19
Pytorch Dataset & Dataloader  (0) 2021.08.18
Pytorch Project Architecture  (0) 2021.08.17
Pytorch Basics  (0) 2021.08.17
Generative Models  (0) 2021.08.13
Comments