딥러닝 공부를 하다 보면 꼭 등장하는 녀석이 있습니다. 바로 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에서 시작된다.
'컴퓨터 과학 > 인공지능' 카테고리의 다른 글
PyTorch DataLoader: 실무에 가까운 고급 사용법과 예제 (0) | 2025.04.08 |
---|---|
CSV 파일 DataLoader로 불러오기 (0) | 2025.04.08 |
오차 측정 (Loss Measurement) (0) | 2025.04.08 |
파인튜닝의 대안: PEFT (Parameter-Efficient Fine-Tuning) (0) | 2025.04.08 |
Continuous Pretraining이란? (0) | 2025.04.08 |