네이버 부스트캠프 AI tech 3기

6. PyTorch nn.Module

zooyeonii 2022. 2. 2. 19:23

nn.Module

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

Input, Output, Forward, Backward / 학습의 대상이 되는 parameter를 정의해야 한다.

nn.Module 과 super().__init__()

코드

1
2
3
4
5
6
7
class GNNStack(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim, task='node'):
        super(GNNStack, self).__init__() 
        self.task = task
        # ModuleList(): 각 레이어를 리스트에 전달하고 레이어의 iterator를 만든다. 
        self.convs = nn.ModuleList() 
 
cs

파이토치에서 신경망은 보통 신경망 모듈(torch.nn.Module)을 상속받는 파이썬 클래스로 정의한다. nn.Module을 상속받으면 파이토치 프레임워크에 있는 각종 도구를 쉽게 적용할 수 있다. 신경망의 구조와 동작을 정의하는 생성자를 모델 클래스에 정의한다.

_ _ init _ _ () 함수는 파이썬에서 객체가 갖는 속성값을 초기화하는 역할로, 객체가 생성될 때 자동으로 호출된다. super() 함수를 부르면 위 예시의 GNNStack 클래스는 파이토치의 nn.Module 클래스의 속성을 가지고 초기화된다.

* super(파생클래스, self).__init__() : super().__init__() 와 기능의 차이는 없으며, 파생클래스를 명시해주는 역할을 하는 것이다.

* reference : https://stackoverflow.com/questions/63058355/why-is-the-super-constructor-necessary-in-pytorch-custom-modules

https://daebaq27.tistory.com/60

위 스택오버플로우에서 super().init()를 안해주면 Attribute Error를 발생하게 되는데, setattr 함수를 내부에서 실행하는데, 이 함수는 nn.Module에서 상속받아오기 때문에 오류가 발생한다. 즉, nn.Module에는 모델을 실행시킬 때 필요한 파라미터, 모듈 등 중요한 특성을 담고있기 때문에 상속받아오고, 초기화가 필요하다.

 

Autograd and Optimizer

nn.Parameter

Parameter : nn.Module 내에 attribute가 될 때는 required_grad=True로 지정되어 학습 대상이 되는 Tensor이다.

Backward

Layer에 있는 파라미터들의 미분을 수행한다.

Forward의 결과값(model 의 output; 예측치)과 실제값과의 차이(loss)에 대해 미분을 수행한다.

해당 미분값으로 파라미터를 업데이트 한다.

코드

1
2
3
4
5
6
7
8
9
10
for epoch in range(epochs):
    # init gradient
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    # get gradients w.r.t to parameters    
    loss.backward()
    # update parameters
    optimizer.step()
 
cs

 

 

 

 

'네이버 부스트캠프 AI tech 3기' 카테고리의 다른 글

8. ResNet 리뷰  (0) 2022.02.03
7. PyTorch DataLoader  (0) 2022.02.02
5. CNN과 RNN  (0) 2022.01.25
4. 확률론, 베이즈  (0) 2022.01.25
3. 딥러닝 학습방법 이해하기  (0) 2022.01.24