2.2.3 모델 정의
파이토치에서 모델을 정의하기 위해서는 모듈(module)을 상속한 클래스를 사용합니다. 그렇다면 모델과 모듈은 무엇이 다를까요?
• 계층(layer): 모듈 또는 모듈을 구성하는 한 개의 계층으로 합성곱층(convolutional layer), 선형 계층(linear layer) 등이 있습니다.
• 모듈(module): 한 개 이상의 계층이 모여서 구성된 것으로, 모듈이 모여 새로운 모듈을 만들 수도 있습니다.
• 모델(model): 최종적으로 원하는 네트워크로, 한 개의 모듈이 모델이 될 수도 있습니다.
단순 신경망을 정의하는 방법
nn.Module을 상속받지 않는 매우 단순한 모델을 만들 때 사용합니다. 구현이 쉽고 단순하다는 장점이 있습니다.
model = nn.Linear(in_features=1, out_features=1, bias=True)
nn.Module( )을 상속하여 정의하는 방법
파이토치에서 nn.Module을 상속받는 모델은 기본적으로 __init__()과 forward() 함수를 포함합니다. __init__()에서는 모델에서 사용될 모듈(nn.Linear, nn.Conv2d), 활성화 함수 등을 정의하고, forward() 함수에서는 모델에서 실행되어야 하는 연산을 정의합니다.
다음은 파이토치에서 모델을 정의하는 코드입니다.
class MLP(Module): def __init__(self, inputs): super(MLP, self).__init__() self.layer = Linear(inputs, 1) ------ 계층 정의 self.activation = Sigmoid() ------ 활성화 함수 정의 def forward(self, X): X = self.layer(X) X = self.activation(X) return X