본문 바로가기
C.W.K.
Stream
Lesson 01 of 08 · published

데이터셋 객체

~18 min · dataset, pytorch, data

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

데이터셋 추상화

PyTorch의 torch.utils.data.Dataset은 '인덱스로 예제 하나를 가져올 수 있는 대상'을 정의하는 표준 계약이야. 이 클래스를 상속하고 __len____getitem__을 구현하면, 그 위에서 데이터 로더, 샘플러, 데이터 증강 같은 나머지 데이터 파이프라인이 그대로 작동해.

데이터셋은 예제별 변환을 처리하는 곳이야. 디스크에서 행을 읽고, 이미지를 디코딩하고, 문자열을 토큰화하고, 텐서를 정규화하지. 예제의 인덱스에 따라 달라지는 작업은 모두 여기에 둬. 반면 묶음에 따라 달라지는 작업, 이를테면 collation이나 최대 길이에 맞춘 padding은 DataLoader의 collate 함수에서 처리해.

팁: 데이터셋은 기본적으로 지연 방식으로 작동해. __getitem__은 누군가 예제를 요청할 때만 실행돼. 그래서 테라바이트 규모의 데이터를 RAM에 전부 올리지 않고도 학습할 수 있어.

Map-style과 iterable-style

Map-style은 가장 흔한 방식이야. Dataset을 상속하고 __getitem__(idx)를 구현해. 무작위 접근과 shuffling을 지원하고 길이도 알려져 있어. 유한하며 인덱스로 접근할 수 있는 데이터셋에 가장 적합해.

Iterable-styleIterableDataset을 상속하고 __iter__를 구현해. 순차 스트리밍 방식이라 무작위 접근을 지원하지 않고, 길이를 알 수 없는 경우도 있어. 기록 스트림, 분산 샤딩, 거대한 web 규모 말뭉치에 가장 적합해.

눈 감고도 쓸 수 있어야 할 데이터셋 3개

  1. 텐서 래퍼 — 메모리에 올린 데이터에는 TensorDataset(X, y)를 써. 프로토타이핑에는 충분해.
  2. 이미지 폴더 — 클래스별 하위 폴더로 구성된 이미지 데이터셋에는 torchvision.datasets.ImageFolder('path/')를 써.
  3. 맞춤형 CSV / JSONL__init__에서 manifest를 읽고 __getitem__에서 필요한 데이터를 지연 로딩해.
원칙: 데이터 버그는 대부분 __getitem__ 안에 숨어 있어. 학습을 시작하기 전에 예제 하나를 출력해 봐. 형태, dtype, 레이블이 모델이 기대하는 값과 맞는지 확인해야 해.

Code

이미지 매니페스트용 맞춤형 데이터셋·python
import torch
from torch.utils.data import Dataset
from PIL import Image
import csv, pathlib

class ManifestImageDataset(Dataset):
    def __init__(self, manifest_path, root, transform=None):
        self.root = pathlib.Path(root)
        self.transform = transform
        with open(manifest_path) as f:
            self.rows = list(csv.DictReader(f))  # [{'filename': ..., 'label': ...}]

    def __len__(self):
        return len(self.rows)

    def __getitem__(self, idx):
        row = self.rows[idx]
        img = Image.open(self.root / row["filename"]).convert("RGB")
        if self.transform is not None:
            img = self.transform(img)
        label = int(row["label"])
        return img, label

External links

Exercise

가지고 있는 표 형식 CSV에 맞는 맞춤형 데이터셋을 작성해. 인덱스로 첫 3개 예제를 꺼내 출력하고 형태와 dtype을 확인해. 문서를 보지 않고 이 작업을 해낼 수 있는 순간이 PyTorch 데이터 계층을 처음으로 제대로 다루게 된 순간이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.