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])) .