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
을 상속받아 신경망을 정의합니다.fc1
과fc2
는 완전연결층(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
을 활용하여 모델을 정의하고, 손실 함수 및 최적화 기법을 설정한 후, 데이터 학습 과정을 구현하는 방법을 살펴보았습니다.
'PyTorch' 카테고리의 다른 글
PyTorch Optimizer 개념 및 사용법 (0) | 2025.04.12 |
---|---|
PyTorch 활성화 함수와 손실 함수 (0) | 2025.04.11 |
PyTorch의 nn.Module과 nn.Sequential 개념 (0) | 2025.04.09 |
PyTorch 데이터 변환 및 Augmentation (0) | 2025.04.08 |
PyTorch 이미지 데이터 및 텍스트 데이터 로딩 (0) | 2025.04.07 |