본문 바로가기
AI-Tech 부스트캠프/파이토치

[PyTorch] torch.nn.Module에 대해서

by Alan_Kim 2022. 12. 24.
728x90
반응형

torch.nn.Module

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

- Input, Output, Forward, Backward 정의

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

 

https://github.com/Vercaca/NN-Backpropagation

 

파이토치 공식 document에서 명시한 코드로 예시를 써놓는다.

https://pytorch.org/docs/stable/generated/torch.nn.Module.html#torch.nn.Module

 

Module — PyTorch 1.13 documentation

Shortcuts

pytorch.org

import torch.nn as nn # 신경망에서 일반적으로 사용되는 모든 연산은 torch.nn모듈에서 활용 가능
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self): # 부모에서 자식클래스로 넘어갈 때 객체가 갖는 속성값을 초기화
        super().__init__() # super()함수는 Model 클래스는 nn.Module 클래스 속성을 가지고 초기화 된다.
        # super(파생클래스,self).__init__()은 super.__init__()과 기능의 차이는 없고 파생클래스를 명시해 준다는 차이점만 있다.
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))

nn.Parameter

- Tensor 객체의 상속 객체

- nn.Module 내에 attribute가 될때는 required_grad=True (Auto Grad의 대상이 된다.)

- 직접 지정할 일이 잘 없다.(대부분 layer에는 weights 값들이 잘 지정되어 있다.)

 

Backward

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

- Forward의 결과값 (model의 output=예측치)과 실제값간의 차이(loss)에 대해 미분을 수행

- 해당 값으로 Parameter 업데이트

 

for epoch in range(epochs):
    optimizer.zero_grad()

    # 주어진 inputs를 model에 넣어 얻은 outputs 추출 (forward propagation)
    outputs = model(inputs)

    # 데이터에 적혀있는 값(labels)와 model을 통해 얻은 outputs의 차이 loss 계산
    loss = criterion(outputs, labels)
    
    # parameters에 관하여 gradients 구하기(backpropagation)
    loss.backward()
    
    # update parameters(파라미터, 가중치 업데이트)
    optimizer.step()

 

728x90
반응형

댓글