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
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.