Deep Learning/PyTorch

[PyTorch] MLP 모델 만들기 2편 - 학습 모델 구축하기

notesfromyoungdeveloper 2025. 1. 13. 23:59
728x90
반응형

 

 

 

지난 1편에서는 학습 데이터셋 만들어 보았습니다.

https://notesfromyoungdeveloper.tistory.com/25

 

[PyTorch] MLP 모델 만들기 1편 - 학습 데이터셋 만들기

PyTorch에서 MLP 모델을 만드는 방법에 대해 알아보겠습니다.MLP는 Multi-Layer Perceptron의 약자로, 입력층(input layer)과 출력층(output layer) 사이에 1개 이상의 은닉층(hidden layer)이 있는 구조의 퍼셉트론을

notesfromyoungdeveloper.tistory.com

 

2편에서는 MLP 모델 구축하는 방법에 대해 알아보겠습니다.

먼저, 전체 코드는 아래와 같고, 하나씩 살펴보겠습니다.

class XORModel(pl.LightningModule):
    ### 1. 모델 초기화
    def __init__(self):
        super(XORModel, self).__init__()
        self.input_layer = nn.Linear(2, 4)
        self.output_layer = nn.Linear(4, 1)
        self.sigmoid = nn.Sigmoid()
        self.loss = nn.MSELoss()

    ### 2. 모델 구조, 입출력 설정
    def forward(self, input):
        # print("INPUT:", input.shape)
        
        x = self.input_layer(input)
        # print("FIRST:", x.shape)
        
        x = self.sigmoid(x)
        # print("SECOND:", x.shape)

        output = self.output_layer(x)
        # print("THIRD:", output.shape)
        return output

    ### 3. Optimizer 설정
    def configure_optimizers(self):
        params = self.parameters()
        optimizer = optim.Adam(params=params, lr = 0.01)
        return optimizer

    ### 4. 학습 단계
    def training_step(self, batch, batch_idx):
        xor_input, xor_target = batch
        # print("XOR INPUT:", xor_input.shape)
        # print("XOR TARGET:", xor_target.shape)
        
        outputs = self(xor_input)   # forward
        # print("XOR OUTPUT:", outputs.shape)
        
        loss = self.loss(outputs, xor_target)
        return loss

 

1. 모델 초기화

모델 초기화에 해당하는 __init__ 메서드에서 아래 3가지를 설정했습니다.

  (1) Layer의 개수와 각 layer의 노드 수

    - Input layer의 노드 수는 2개, hidden layer의 노드 수는 4개, 그리고 output layer의 노드 수는 1개로 설정했습니다.

  (2) 활성화 함수

    - Sigmoid 함수를 활성화 함수로 정하고 초기화했습니다.

  (3) Loss function

    - 평균 제곱 오차(MSE, Mean Square Error)를 loss function으로 설정했습니다.

 

2. 모델 구조, 입출력 설정

forward 메서드에서는 아래 2가지를 설정했습니다.

  (1) 모델 구조

    - 모델 구조가 입력, input layer, sigmoid, output layer, 출력의 구조가 되도록 설정했습니다.

  (2) 모델 입력이 어떻게 출력으로 나오는지

    - 모델 입력이 input layer, sigmoid, output layer를 순차적으로 통과하여, 모델 출력이 나오게 설정했습니다.

코드에서 print 문의 주석을 풀면, 입출력과 각 layer 입출력 데이터의 형태를 확인할 수 있습니다.

 

3. Optimizer 설정

configure_optimizers 메서드에서는 optimizer를 설정했습니다.

Adam optimizer를 사용했고, learning rate는 0.01로 설정했습니다.

 

4. 학습 단계

학습 단계에서는 모델의 출력(outputs)과 정답(xor_target)의 loss를 계산합니다.

마찬가지로 print 문의 주석을 풀면, 데이터 형태를 확인할 수 있습니다.


참고 문헌: 파이토치 라이트닝으로 시작하는 딥러닝

참고 페이지 링크: https://github.com/PacktPublishing/Deep-Learning-with-PyTorch-Lightning/blob/main/Chapter02/Github_Copy_of_Perceptron_model_XOR.ipynb

 

 

 

728x90
반응형