[파이썬] PyTorch 커스텀 모듈 및 레이어 작성

PyTorch는 딥 러닝을 위한 강력한 프레임워크이며, 사용자가 자신만의 커스텀 모듈과 레이어를 작성할 수 있는 유연성을 제공합니다. 이 기능을 사용하면 PyTorch를 사용하여 고유한 모델 구조와 동작을 정의할 수 있습니다.

이 블로그 글에서는 PyTorch에서 커스텀 모듈 및 레이어를 작성하는 방법에 대해 알아보겠습니다. 예제 코드를 통해 실제로 어떻게 커스텀 모듈과 레이어를 작성하는지 확인해보겠습니다.

커스텀 모듈 작성

먼저, PyTorch에서 커스텀 모듈을 작성하는 방법을 알아보겠습니다. PyTorch에서는 nn.Module 클래스를 상속하는 클래스로 커스텀 모듈을 작성할 수 있습니다. 이 클래스는 모듈의 파라미터와 순전파(forward) 메서드를 정의할 수 있는 기능을 제공합니다.

다음은 간단한 커스텀 모듈 예제입니다. 이 예제는 입력값에 대해 선형 변환을 수행하는 모듈을 작성한 것입니다.

import torch
import torch.nn as nn

class LinearModule(nn.Module):
    def __init__(self, in_features, out_features):
        super(LinearModule, self).__init__()
        self.weights = nn.Parameter(torch.randn(out_features, in_features))
        self.bias = nn.Parameter(torch.randn(out_features))
    
    def forward(self, x):
        out = torch.matmul(x, self.weights.t()) + self.bias
        return out

위의 코드에서 LinearModule 클래스는 nn.Module을 상속합니다. _init__ 메서드에서는 모듈의 파라미터인 weightsbias를 정의합니다. forward 메서드에서는 선형 변환을 수행하고 결과를 반환합니다.

커스텀 레이어 작성

또 다른 유용한 기능은 PyTorch에서 커스텀 레이어를 작성하는 것입니다. 커스텀 레이어는 nn.Module을 상속하는 클래스로 구현되며, 다른 레이어를 조합하여 새로운 동작을 만들 수 있습니다.

다음은 간단한 커스텀 레이어 예제입니다. 이 예제는 입력값에 대해 ReLU 활성화 함수를 적용하는 레이어를 작성한 것입니다.

import torch
import torch.nn as nn

class ReLULayer(nn.Module):
    def __init__(self):
        super(ReLULayer, self).__init__()
    
    def forward(self, x):
        out = torch.max(x, torch.zeros_like(x))
        return out

위의 코드에서 ReLULayer 클래스는 nn.Module을 상속합니다. forward 메서드에서는 입력값에 대해 ReLU 활성화 함수를 적용하고 결과를 반환합니다.

커스텀 모듈 및 레이어 사용하기

커스텀 모듈 및 레이어를 작성했으므로, 이를 실제로 활용해 보겠습니다. 예를 들어, 커스텀 모듈과 레이어를 활용하여 다층 퍼셉트론(MLP) 모델을 작성할 수 있습니다.

import torch
import torch.nn as nn

class MLP(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(MLP, self).__init__()
        self.linear1 = LinearModule(input_dim, hidden_dim)
        self.relu = ReLULayer()
        self.linear2 = LinearModule(hidden_dim, output_dim)
    
    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)
        return x

# 모델 인스턴스화
input_dim = 10
hidden_dim = 20
output_dim = 5
model = MLP(input_dim, hidden_dim, output_dim)

위의 예제에서 MLP 클래스는 nn.Module을 상속하며, 두 개의 커스텀 모듈(LinearModule)과 하나의 커스텀 레이어(ReLULayer)를 조합하여 MLP 모델을 정의합니다. forward 메서드에서는 순전파 과정을 정의합니다.

커스텀 모듈과 레이어를 사용하여 자신만의 고유한 모델 구조와 동작을 작성하면, PyTorch를 사용하여 딥 러닝 모델을 구성하는 데 더욱 유연성과 제어력을 가질 수 있습니다.