[Pytorch] torch.nn.Parameter

qw4735·2023년 1월 6일
post-thumbnail

torch.nn.Module.parameters()

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
  • 공식 문서에 따르면, parameters() 메소드는 모듈의 파라미터들을 iterator로 반환한다.

torch.nn.Parameter

sigma = nn.Parameter(torch.ones(1*0.1)) #sigma는 model의 parameter가 됨
  • torch.nn.Parameter 클래스는 자동미분이 되는(requires_grad=True) torch.Tensor이다.

  • torch.nn.Parameter 클래스는 torch.Tensor 클래스를 상속받아 만들어졌고,
    torch.nn.Module 클래스의 attribute로 할당하면, 자동으로 parameter 리스트(model.parameters())에 추가된다.

\therefore \quad torch.nn.Parameter를 어떨 때 사용하나?
\rightarrow 텐서는 텐서인데, 파라미터로 지정하고 싶은 텐서일때 사용

추가

그런데 신경망 구조를 구현할 때, 보통 아래와 같이 하위 모듈을 추가하는 식으로 구현을 하기 때문에, model.parameters()에 파라미터를 직접 추가할 일이 거의 없었다.
(하위 모듈만 추가해도 자동으로 파라미터가 설정되기 때문이다)

class MyModule(torch.nn.Module):
    def __init__(self):
    	super(MyModule, self).__init__()
        self.A = torch.nn.Linear(100, 200)
        self.B = torch.nn.Linear(200, 10)
    def forward(input):
    	return self.B(self.A(input))

- parameters() 메소드는 먼저 모든 하위 모듈들을 탐색하고(recursive=True), 각 모듈의 _parameters에 들어있는 파라미터들을 하나씩 반환하는 함수이다.

e.g A.parameters()를 호출하면, [A.B.weight, A.B.bias, A.C.D.weight, A.C.D.bias]가 반환된다.(물론 recursive=False를 지정하면 직접 A에 속한 파라메터만 반환하는데, 아래 경우에는 아무것도 반환되지 않게된다.)

reference: https://easy-going-programming.tistory.com/11

0개의 댓글