nn.Module 에서 backward는 정의 안해도 되나?

mincheol2·2022년 2월 2일
0

Pytorch

목록 보기
5/6

Pytorch에서 nn.Module은 모든 신경망의 근본이 되는 클래스이다.

pytorch를 좀 더 깊이 있게 공부하고 싶어 Pytorch 공식문서에서 nn.Module의 코드를 까보면서 뭐가 있나 살펴보다가

nn.Module에서 backward 는 정의 안해도 되는가?

하는 의문이 들었다.
새로운 신경망 클래스를 정의할 때
init이랑 forward만 정의 하는 경우가 대부분이고 backward는 정의한 경우가 없었다.

이러한 궁금증에 대해 알아본 내용을 간단히 정리해보고자 한다.

nn.Module은 자동미분을 지원!

  • nn.Moduleinput , output , forward , backward 를 정의하도록 되어 있다.
  • 이때 input , output__init__ 에 정의하고
  • forward 는 함수로써 어떤기능을 할지, 클래스 내에서 def forward()를 정의한다

    • 정의하지 않는다면 NotImplementedError가 발생한다.
  • 그렇담 backward 는 어떻게 하는가?? 따로 함수가 존재하지 않았다.

    • pytorch는 autograd(자동미분) 을 지원한다고 했다.

    • 그렇기 때문에 역전파가 어떻게 되는지 구현할 필요는 없다

    • 하지만 정해줄 수 있는게 있는데 nn.Parameter 라는 객체를 통해 __init__ 안에서 weight, bias 같은 파라메터를 정의해주면 된다.

      Example Code

      class Model(nn.Module):
          def __init__(self):
              super().__init__()
      
      		# weight 파라미터를 설정해서 backward에서 쓰이도록 하겠다
              self.weight = Parameter(torch.Tensor([7])) .
profile
옹오옹오오오옹ㅇㅇ

0개의 댓글