컴퓨터 과학/인공지능

PyTorch에서 DataLoader를 쓰는 이유는 뭘까?

컴공카 2025. 4. 8. 22:11
반응형

딥러닝 공부를 하다 보면 꼭 등장하는 녀석이 있습니다. 바로 DataLoader.
처음엔 그냥 "데이터를 한 번에 여러 개 불러와주는 도구인가보다~" 하고 넘어가지만,
실제로는 학습 효율성, 성능, 확장성까지 책임지는 핵심 유틸리티라는 걸 알게 되죠.

오늘은 왜 PyTorch에서 DataLoader를 써야 하는지, 그리고 어떻게 사용하는지 예제와 함께 살펴볼게요.


✅ DataLoader란?

PyTorch의 DataLoader는 데이터셋을 배치 단위로 나눠서, 하나씩 모델에 전달할 수 있게 도와주는 데이터 관리 도구입니다.

좀 더 정확하게 말하면:

  • 데이터를 작은 묶음(batch) 으로 잘라서,
  • 필요할 때마다 (iterator처럼) 꺼내쓰고,
  • 데이터를 랜덤으로 섞거나, 병렬로 불러오거나,
  • GPU 학습이 원활하도록 메모리도 최적화해주는 똑똑한 로더입니다.

🤔 왜 DataLoader를 꼭 써야 할까?

1. 학습 속도 향상

한 번에 한 샘플씩 모델에 넣는다면? 너무 느리겠죠.
DataLoader는 여러 개의 샘플을 한꺼번에(Batch) 가져와서 GPU에 올릴 수 있게 해줍니다.


2. Shuffle & Randomness

shuffle=True 옵션을 주면, 에폭마다 데이터 순서를 무작위로 섞어서 모델이 특정 순서에 과적합하는 걸 막아줍니다.


3. 병렬 처리 (num_workers)

CPU 코어를 여러 개 활용해서 데이터를 빠르게 로딩할 수 있습니다.
큰 이미지나 텍스트를 다룰 땐 num_workers 옵션이 엄청 중요합니다.


4. 깔끔한 코드 구조

직접 배치 구성하고 반복문 돌리는 코드보다 훨씬 간결하고 안정적입니다.
또한 커스텀 데이터셋을 만들어도 DataLoader만 바꿔 끼우면 됩니다.

 

📦 실습 예제: MNIST 손글씨 데이터를 DataLoader로 불러오기

import torch
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt

# 1. MNIST 데이터셋 로드 (Tensor로 변환)
train_data = datasets.MNIST(
    root='data',
    train=True,
    download=True,
    transform=ToTensor()
)

# 2. DataLoader 생성
train_loader = DataLoader(
    dataset=train_data,
    batch_size=32,    # 32개씩 가져오기
    shuffle=True      # 매 에폭마다 섞기
)

# 3. 한 배치만 확인해보기
for images, labels in train_loader:
    print(f"📦 배치 크기: {images.shape}")  # torch.Size([32, 1, 28, 28])
    print(f"🏷️ 라벨: {labels[:5]}")       # 첫 5개 라벨 확인
    break

# 4. 이미지 시각화
plt.imshow(images[0].squeeze(), cmap='gray')
plt.title(f"Label: {labels[0].item()}")
plt.axis('off')
plt.show()

 

🚀 정리: DataLoader는 실전의 시작이다

DataLoader는 단순한 "데이터 나눠주는 함수"가 아닙니다.
모델 훈련을 실전으로 끌어올리는 필수 도구이자, 학습 효율성과 안정성을 보장해주는 똑똑한 친구죠.

데이터를 잘 다루는 것이 딥러닝의 반이다.
그리고 그 시작은 DataLoader에서 시작된다.

반응형