1. 정의
- PyTorch에서 딥러닝 모델을 설계/학습하는 기반 클래스
- 신경망 계층, 활성화 함수, 손실 함수 등 구성 요소를 포함
- 사용자 정의 모델은 보통
nn.Module을 상속해 구현
2. 주요 역할
신경망 구축 및 학습 지원
- 레이어:
nn.Linear, nn.Conv2d, nn.LSTM
- 활성화:
nn.ReLU, nn.Sigmoid, nn.Softmax
- 손실 함수:
nn.MSELoss, nn.CrossEntropyLoss
- 정규화:
nn.BatchNorm1d/2d, nn.LayerNorm
사용자 정의 모델 설계
__init__: 모델 구조(레이어/파라미터) 정의
forward: 입력 데이터의 연산 흐름 정의
super().__init__() 호출로 부모 클래스 초기화
파라미터 관리
- 가중치/편향 자동 추적
.parameters()로 학습 파라미터 제공
.to(device) / .cuda()로 장치 전환
3. 코드 구성 방식
기본 예시
import torch.nn as nn
class MyModel(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
__init__: 레이어 정의
forward: 입력→연산→출력
model(x) 호출 시 forward가 자동 실행
모듈 중첩과 블록화
nn.Sequential로 여러 레이어를 블록처럼 묶기 가능
- 다른
nn.Module을 서브모듈로 포함해 계층적 설계 가능
4. nn.Module vs torch.nn.functional
| 구분 |
nn.Module |
torch.nn.functional |
| 형태 |
클래스 기반 |
함수 기반 |
| 파라미터 |
학습 가능한 파라미터 포함 가능 |
파라미터 없음(연산 함수 중심) |
| 사용 예 |
nn.Linear, nn.Conv2d |
F.relu, F.softmax |
| 장점 |
구조화/재사용/파라미터 관리 용이 |
가볍고 유연한 연산 구성 |
5. 핵심 요약
torch.nn.Module은 딥러닝 모델의 설계도 역할
- 구조 정의 + 파라미터 관리 + 모듈화 지원
__init__에서 재료(레이어)를 정의하고 forward에서 조리법(연산 흐름)을 작성
생각해볼 질문
- Q1.
nn.Module을 상속하지 않고 모델을 만들면 어떤 불편함이 생길까?
- Q2.
nn.Sequential 기반 구성과 직접 forward 구현 방식의 차이는?
- Q3.
torch.nn.functional만으로 모델 구현이 가능하다면 장단점은?