PyTorch

PyTorch 기본적인 신경망 구축

PyExplorer 2025. 4. 10. 14:24
728x90

PyTorch 기본적인 신경망 구축

PyTorch는 동적 그래프를 기반으로 하는 강력한 딥러닝 프레임워크입니다. 이번 포스팅에서는 torch.nn.Module을 활용하여 기본적인 신경망을 구축하는 방법을 설명합니다. 또한, torch.optim을 이용한 모델 학습 과정과 함께 간단한 예제 코드를 통해 개념을 정리하겠습니다.

1. 신경망의 기본 개념

신경망(Neural Network)은 여러 개의 뉴런이 계층적으로 연결된 구조를 가지며, 주어진 입력 데이터에 대한 출력을 예측하는 모델입니다. 가장 기본적인 신경망 구조는 입력층(Input Layer), 은닉층(Hidden Layer), 출력층(Output Layer)으로 구성됩니다.

PyTorch에서는 torch.nn.Module 클래스를 상속받아 신경망 모델을 정의할 수 있으며, forward() 메서드를 구현하여 입력 데이터가 신경망을 통과하는 과정을 정의합니다.

2. 기본적인 신경망 구현

먼저, PyTorch의 기본 라이브러리를 불러오고, 간단한 신경망 모델을 정의하는 방법을 살펴보겠습니다.

import torch
import torch.nn as nn
import torch.optim as optim

# 기본 신경망 클래스 정의
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 20)  # 입력층 (10차원 입력 -> 20차원 출력)
        self.fc2 = nn.Linear(20, 1)   # 은닉층 (20차원 입력 -> 1차원 출력)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 모델 생성
model = SimpleNN()
print(model)

코드 설명

  • SimpleNN 클래스는 nn.Module을 상속받아 신경망을 정의합니다.
  • fc1fc2는 완전연결층(Fully Connected Layer)이며, nn.Linear()를 사용하여 생성됩니다.
  • ReLU 활성화 함수는 비선형성을 추가하여 모델의 표현력을 증가시킵니다.
  • forward() 메서드에서 입력 데이터를 fc1을 통과시키고 활성화 함수를 적용한 후, fc2를 통해 최종 출력을 생성합니다.

3. 손실 함수와 최적화 기법 설정

모델이 학습하려면 손실 함수와 최적화 기법을 설정해야 합니다. PyTorch에서는 다양한 손실 함수(nn.MSELoss, nn.CrossEntropyLoss 등)와 최적화 알고리즘(SGD, Adam 등)을 제공합니다.

# 손실 함수 및 최적화 기법 정의
criterion = nn.MSELoss()  # 평균 제곱 오차 손실 함수
optimizer = optim.Adam(model.parameters(), lr=0.01)  # Adam 최적화 알고리즘

4. 신경망 학습 과정

이제 데이터를 생성하고 신경망을 학습하는 기본적인 과정을 설명하겠습니다.

# 가상의 입력 데이터 및 정답 데이터 생성
x_train = torch.rand(100, 10)  # 100개의 샘플, 각 샘플은 10차원 입력
y_train = torch.rand(100, 1)   # 100개의 타겟 값

# 모델 학습 과정
num_epochs = 100
for epoch in range(num_epochs):
    optimizer.zero_grad()  # 기울기 초기화
    outputs = model(x_train)  # 모델의 예측값 계산
    loss = criterion(outputs, y_train)  # 손실 계산
    loss.backward()  # 역전파 수행
    optimizer.step()  # 가중치 업데이트

    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

코드 설명

  • optimizer.zero_grad()를 호출하여 이전 단계에서 계산된 기울기를 초기화합니다.
  • 모델의 forward() 메서드를 호출하여 출력을 계산합니다.
  • 손실 함수를 사용하여 예측값과 실제값의 차이를 계산합니다.
  • backward()를 호출하여 기울기를 계산한 후, optimizer.step()을 실행하여 가중치를 업데이트합니다.
  • 일정한 주기(epoch)마다 손실 값을 출력하여 학습 진행 상황을 확인합니다.

5. 모델 평가

학습이 완료된 모델을 평가하는 방법을 알아보겠습니다.

# 테스트 데이터 생성
x_test = torch.rand(10, 10)  # 10개의 샘플

y_pred = model(x_test)  # 예측값 생성
print(y_pred)

코드 설명

  • 새로운 입력 데이터(x_test)를 모델에 전달하여 예측값을 생성합니다.
  • 학습된 모델이 입력 데이터에 대해 얼마나 잘 예측하는지 확인할 수 있습니다.

6. 결론

이번 포스팅에서는 PyTorch를 이용하여 기본적인 신경망을 구축하는 방법을 설명했습니다. torch.nn.Module을 활용하여 모델을 정의하고, 손실 함수 및 최적화 기법을 설정한 후, 데이터 학습 과정을 구현하는 방법을 살펴보았습니다.

728x90