-
PyTorch를 활용한 신경망 모델 정의Pytorch 2025. 3. 10. 11:20728x90
PyTorch에서 신경망을 정의하는 방법을 정리한다.
모델을 생성할 때는 nn.Module을 상속받아 필요한 레이어를 정의하고, forward() 메서드에서 연산을 수행하도록 구성한다.
1. 신경망 모델 정의 (nn.Module 사용)
import torch import torch.nn as nn class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(7, 32) # 입력 차원 7 → 은닉층 32 self.fc2 = nn.Linear(32, 1) # 은닉층 32 → 출력층 1 self.relu = nn.ReLU() self.sigmoid = nn.Sigmoid() # Binary Classification을 위한 활성화 함수 def forward(self, x): x = self.relu(self.fc1(x)) # 첫 번째 완전연결층 + ReLU 활성화 x = self.sigmoid(self.fc2(x)) # 두 번째 완전연결층 + Sigmoid 활성화 return x
1.1 __init__() 메서드에서 신경망 정의
- self.fc1 = nn.Linear(7, 32) → 입력 차원 7을 32로 변환하는 완전연결층
- self.fc2 = nn.Linear(32, 1) → 은닉층에서 1개의 출력 노드로 변환
- self.relu = nn.ReLU() → 은닉층 활성화 함수로 ReLU 사용
- self.sigmoid = nn.Sigmoid() → 출력층 활성화 함수로 Sigmoid 사용
nn.Linear(input_dim, output_dim) 형태로 레이어를 정의하며, 활성화 함수는 따로 지정하여 사용한다.
1.2 forward() 메서드에서 순전파(Forward) 연산
def forward(self, x): x = self.relu(self.fc1(x)) # 첫 번째 완전연결층 + ReLU 활성화 x = self.sigmoid(self.fc2(x)) # 두 번째 완전연결층 + Sigmoid 활성화 return x
- 첫 번째 완전연결층(fc1)을 거친 후 ReLU 활성화
- 두 번째 완전연결층(fc2)을 거친 후 Sigmoid 활성화하여 확률값 출력
PyTorch에서는 model(data)를 호출하면 내부적으로 forward() 메서드가 자동으로 실행된다.
2. 모델 인스턴스 생성 및 GPU로 이동
모델을 생성한 후, GPU가 사용 가능한 경우 to(device)를 사용하여 모델을 GPU로 이동할 수 있다.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = NeuralNetwork().to(device)
이제 모델을 device(CPU 또는 GPU)에 맞게 할당하여 학습을 진행할 수 있다.
3. model(data)가 forward()를 호출하는 원리
PyTorch에서는 model(data)를 호출하면 자동으로 forward()가 실행된다.
outputs = model(data)
내부적으로 __call__() 메서드가 실행되면서 forward()가 호출된다.
# PyTorch 내부 동작 방식 output = model.__call__(data) # 내부적으로 __call__() 실행 output = model.forward(data) # __call__() 안에서 forward() 실행
즉, 사용자는 forward()를 직접 호출할 필요 없이 model(data)만 호출하면 된다.
728x90'Pytorch' 카테고리의 다른 글
PyTorch 모델 학습 및 평가 코드 이해하기 (0) 2025.03.10 PyTorch의 view()와 reshape() 비교 (0) 2025.03.06