본문 바로가기

컴퓨터 과학/인공지능

dataset과 dataloader의 차이와 활용도

반응형

1. Dataset

Dataset은 데이터셋 전체에 대한 정의입니다.
데이터의 구조, 길이, 하나씩 접근하는 방법을 정의하는 클래스예요.

🔧 주요 기능

  • __len__: 전체 데이터 샘플 개수 반환
  • __getitem__: 인덱스를 이용해 하나의 샘플 반환

📌 활용도

  • 커스텀 데이터셋을 정의할 때 사용
  • 이미지, 텍스트 등 어떤 데이터든 구조만 정해주면 됨
  • 전처리(transform)도 Dataset 클래스 내부에서 처리 가능

🧸 예시

from torch.utils.data import Dataset

class MyDataset(Dataset):
    def __init__(self, data, labels):
        self.data = data
        self.labels = labels
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        return self.data[idx], self.labels[idx]
 

2. DataLoader

DataLoader는 Dataset으로부터 배치 단위로 데이터를 뽑아주는 역할을 해요.
학습 시에 데이터를 하나씩 불러오는 게 아니라, 미니배치로 묶어서 사용하죠.

🔧 주요 기능

  • batch_size: 한 번에 가져올 데이터 수
  • shuffle: 데이터 셔플링 여부
  • num_workers: 데이터 로딩을 위한 subprocess 수
  • drop_last: 마지막 배치를 버릴지 여부

📌 활용도

  • 모델 학습 시, 성능과 속도 향상
  • 병렬 데이터 로딩 가능
  • 배치 학습, 셔플, 순차 처리 등 편리하게 처리

🧸 예시

from torch.utils.data import DataLoader

# 위에서 만든 Dataset 사용
dataset = MyDataset(data=[[1, 2], [3, 4], [5, 6]], labels=[0, 1, 0])

# DataLoader로 배치화
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

for batch in dataloader:
    print(batch)

🚀 요약

항목DatasetDataLoader
역할 데이터 구조 정의, 하나씩 접근 배치 단위로 데이터 제공, 학습 최적화
필요 함수 __len__, __getitem__ 없음 (Dataset을 인자로 받음)
핵심 기능 커스텀 데이터셋 구성 배치 처리, 셔플링, 병렬 로딩 등
예시 사용처 이미지 분류 데이터셋 정의 학습 루프에서 배치 처리
반응형