모델 설계 방법
nn.Module을 상속받아 모델을 정의합니다. __init__ 함수는 레이어 초기화와 매개변수 설정을 담당하며, forward 함수는 입력 데이터의 처리 흐름을 구현합니다.
class CustomModel(nn.Module):
def __init__(self):
super().__init__()
self.layer_stack = nn.Sequential(
nn.Linear(32, 64),
nn.LeakyReLU(),
nn.Linear(64, 10)
)
def forward(self, x):
return self.layer_stack(x)
연산 장치 설정
GPU 가용성 확인 후 장치를 지정합니다:
device_config = torch.device("cuda" if torch.cuda.is_available() else "mps")
사용자 정의 데이터셋 생성
Dataset 클래스를 상속하여 사용자 데이터셋을 구현합니다:
class ImageDataset(Dataset):
def __init__(self, file_paths, transforms=None):
self.paths = file_paths
self.transform = transforms
def __len__(self):
return len(self.paths)
def __getitem__(self, idx):
image = Image.open(self.paths[idx])
if self.transform:
image = self.transform(image)
return image, 0 # 라벨 예시
데이터로더 활용
배치 처리와 데이터 셔플링을 위한 DataLoader 설정:
from torch.utils.data import DataLoader
dataset = ImageDataset(image_files)
data_loader = DataLoader(dataset, batch_size=32, shuffle=True)
사용자 정의 변환 작업
Lambda를 이용한 커스텀 변환 연산:
custom_transform = T.Lambda(lambda img: img.rotate(15))
역전파 제어 기법
그래디언트 계산 관리 방법:
- torch.no_grad() 컨텍스트로 그래디언트 추적 비활성화
- 파라미터 고정이 필요할 때 requires_grad=False 설정
with torch.no_grad():
output = model(input_data)
모델 저장 및 로드
state_dict를 이용한 모델 상태 관리:
# 저장
torch.save(model.state_dict(), 'model_weights.pth')
# 로드
loaded_model = CustomModel()
loaded_model.load_state_dict(torch.load('model_weights.pth'))
학습 프로세스 개요
전형적인 학습 루프 구조:
- DataLoader에서 배치 데이터 추출
- 모델 예측 및 손실 계산
- loss.backward()로 그래디언트 계산
- optimizer.step()으로 가중치 갱신
- optimizer.zero_grad()로 그래디언트 초기화