Pytorch에서 nn.Module
은 모든 신경망의 근본이 되는 클래스이다.
pytorch를 좀 더 깊이 있게 공부하고 싶어 Pytorch 공식문서에서 nn.Module
의 코드를 까보면서 뭐가 있나 살펴보다가
nn.Module
에서backward
는 정의 안해도 되는가?
하는 의문이 들었다.
새로운 신경망 클래스를 정의할 때
init
이랑 forward
만 정의 하는 경우가 대부분이고 backward
는 정의한 경우가 없었다.
이러한 궁금증에 대해 알아본 내용을 간단히 정리해보고자 한다.
nn.Module
은 input
, 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])) .