0Pricing
Learn AI with Python · 강의

사용자 지정 데이터셋과 DataLoaders

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, 변환, 데이터 증강을 다룹니다.

사용자 지정 데이터셋과 DataLoaders은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

모델에 데이터 입력하기

학습에는 데이터를 효율적으로 읽고, 변환하고, 배치로 묶는 방법이 필요합니다. PyTorch는 두 가지 추상화를 제공합니다. 데이터셋은 샘플 하나를 가져오는 방법을 알고 있고, DataLoader는 샘플을 배치로 묶고 섞습니다.

from torch.utils.data import Dataset, DataLoader

Dataset 인터페이스

사용자 정의 Dataset 하위 클래스는 두 메서드를 구현해야 합니다. __len__은 샘플 수를 반환하고, __getitem__은 인덱스에 해당하는 샘플을 반환합니다. PyTorch는 이 메서드들을 호출하여 데이터를 가져옵니다.

__len__ 구현하기

__len__은 PyTorch에 데이터셋의 크기를 알려 줍니다. 이를 통해 존재하는 인덱스의 수와 한 에폭에 포함되는 배치 수를 파악할 수 있습니다.

class ImageDataset(Dataset):
    def __init__(self, paths, labels):
        self.paths = paths
        self.labels = labels

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

__getitem__ 구현하기

__getitem__은 인덱스를 받아 샘플 하나와 해당 레이블을 불러와 반환합니다. 이미지 파일을 열고 텐서로 변환하는 작업은 여기서 수행합니다.

from PIL import Image

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        label = self.labels[idx]
        return img, label

변환이 필요한 이유

원본 이미지는 크기와 픽셀 범위가 서로 다릅니다. 변환은 이미지를 표준화합니다. 크기를 고정된 형태로 변경하고, 텐서로 변환하며, 모델이 안정적으로 학습되도록 픽셀 값을 정규화합니다.

from torchvision import transforms

transforms.Compose

transforms.Compose는 여러 변환을 순서대로 적용하는 하나의 처리 과정으로 연결합니다. 일반적인 연결 순서는 Resize, ToTensor, Normalize입니다.

tf = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])

변환 이해하기

Resize는 공간 크기를 고정하고, ToTensor는 PIL 이미지를 텐서로 변환하면서 픽셀을 [0,1] 범위로 조정합니다. Normalize는 각 채널을 평균 0, 분산 1이 되도록 이동하고 크기를 조정하여 수렴을 빠르게 합니다.

데이터셋에서 변환 적용하기

변환을 데이터셋에 전달하고 __getitem__ 내부에서 적용하면 샘플을 가져올 때마다 일관되게 전처리할 수 있습니다.

class ImageDataset(Dataset):
    def __init__(self, paths, labels, transform):
        self.paths, self.labels, self.transform = paths, labels, transform

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        return self.transform(img), self.labels[idx]

DataLoader로 감싸기

DataLoader는 Dataset을 배치의 반복 가능한 모음으로 변환합니다. batch_size로 한 단계에 처리할 샘플 수를 정하고, shuffle=True로 매 에폭마다 순서를 무작위로 섞습니다. 이는 학습에 중요합니다.

dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)

속도를 높이는 num_workers

num_workers는 GPU가 학습하는 동안 데이터를 불러오고 변환하는 병렬 하위 프로세스를 생성하여 입출력 지연 시간을 숨깁니다. 4와 같은 값을 사용하면 기다리지 않고 GPU에 데이터를 계속 공급하는 데 도움이 됩니다.

loader = DataLoader(
    dataset,
    batch_size=32,
    shuffle=True,
    num_workers=4
)

배치 반복하기

DataLoader를 반복문으로 순회하여 배치 텐서를 가져옵니다. 각 반복에서 (images, labels)가 반환되며, images의 형태는 [batch_size, channels, H, W]입니다. 따라서 바로 모델에 입력할 수 있습니다.

for images, labels in loader:
    print(images.shape)  # torch.Size([32, 3, 224, 224])
    break

빠른 확인

데이터 처리 과정에 대한 이해도를 확인해 보세요.

복습: 데이터셋과 DataLoader

__len__과 __getitem__을 포함한 사용자 정의 Dataset을 만들고, transforms.Compose(Resize, ToTensor, Normalize)로 이미지를 전처리했습니다. 또한 batch_size, shuffle, num_workers를 설정한 DataLoader로 감싸 모델에 배치를 효율적으로 공급했습니다.

자주 묻는 질문

“사용자 지정 데이터셋과 DataLoaders” 강의는 무료인가요?

네 — “사용자 지정 데이터셋과 DataLoaders” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 지정 데이터셋과 DataLoaders”에서 뭘 배우나요?

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, 변환, 데이터 증강을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“사용자 지정 데이터셋과 DataLoaders” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. PyTorch 텐서와 Autograd
  2. 사용자 지정 데이터셋과 DataLoaders
  3. PyTorch에서 CNN 구축 및 학습
  4. YOLOv8을 활용한 객체 탐지
← Learn AI with Python(으)로 돌아가기