728x90
PyTorch 이미지 데이터 및 텍스트 데이터 로딩
PyTorch는 강력한 데이터 처리 기능을 제공하여 딥러닝 모델을 효율적으로 학습할 수 있도록 돕습니다. 특히, torchvision
과 torchtext
를 활용하면 이미지와 텍스트 데이터를 쉽게 로드하고 변환할 수 있습니다. 이번 포스팅에서는 PyTorch를 사용하여 이미지 및 텍스트 데이터를 로딩하는 방법을 상세히 설명하겠습니다.
1. PyTorch에서 데이터 로딩 개요
PyTorch는 Dataset
과 DataLoader
를 사용하여 데이터를 효율적으로 관리합니다.
torch.utils.data.Dataset
: 데이터셋을 정의하고 개별 데이터를 불러오는 역할을 합니다.torch.utils.data.DataLoader
: 배치(batch) 단위로 데이터를 로딩하며, 데이터 섞기(shuffling) 및 병렬 처리(num_workers) 기능을 제공합니다.
데이터 로딩 과정은 다음과 같은 단계로 진행됩니다.
- Dataset 정의:
torch.utils.data.Dataset
을 상속하여 커스텀 데이터셋을 만들거나,torchvision
및torchtext
에서 제공하는 데이터셋을 활용합니다. - DataLoader 생성:
Dataset
을DataLoader
에 전달하여 배치(batch) 단위로 데이터를 불러옵니다. - 데이터 변환 적용:
torchvision.transforms
또는torchtext.transforms
를 이용하여 전처리를 수행합니다.
2. 이미지 데이터 로딩
PyTorch는 torchvision.datasets
과 torchvision.transforms
를 활용하여 이미지 데이터를 쉽게 로딩하고 변환할 수 있습니다.
2.1 torchvision.datasets
을 활용한 이미지 데이터 로딩
import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# 데이터 변환 정의 (이미지 크기 조정, 정규화 등)
transform = transforms.Compose([
transforms.Resize((32, 32)), # 이미지 크기 조정
transforms.ToTensor(), # 텐서로 변환
transforms.Normalize((0.5,), (0.5,)) # 정규화
])
# CIFAR-10 데이터셋 로딩
train_dataset = datasets.CIFAR10(root="./data", train=True, transform=transform, download=True)
test_dataset = datasets.CIFAR10(root="./data", train=False, transform=transform, download=True)
# DataLoader 생성
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
2.2 커스텀 이미지 데이터셋 로딩
2.2.1 ImageFolder
를 활용한 이미지 데이터 로딩
from torchvision.datasets import ImageFolder
dataset = ImageFolder(root="./data/train", transform=transform)
loader = DataLoader(dataset, batch_size=32, shuffle=True)
2.2.2 커스텀 Dataset
클래스를 활용한 이미지 데이터 로딩
from torch.utils.data import Dataset
from PIL import Image
import os
class CustomImageDataset(Dataset):
def __init__(self, image_dir, transform=None):
self.image_dir = image_dir
self.transform = transform
self.image_files = os.listdir(image_dir)
def __len__(self):
return len(self.image_files)
def __getitem__(self, idx):
img_path = os.path.join(self.image_dir, self.image_files[idx])
image = Image.open(img_path).convert("RGB")
if self.transform:
image = self.transform(image)
return image
dataset = CustomImageDataset("./data/custom_images", transform=transform)
loader = DataLoader(dataset, batch_size=16, shuffle=True)
3. 텍스트 데이터 로딩
PyTorch는 torchtext
를 통해 텍스트 데이터를 효과적으로 다룰 수 있습니다.
3.1 torchtext.datasets
를 활용한 텍스트 데이터 로딩
from torchtext.datasets import IMDB
from torchtext.data.utils import get_tokenizer
# 데이터 다운로드 및 로딩
train_iter = IMDB(split='train')
tokenizer = get_tokenizer("basic_english")
# 첫 번째 데이터 확인
for label, line in train_iter:
print(f"Label: {label}, Review: {line[:100]}...") # 첫 100글자만 출력
break
3.2 커스텀 텍스트 데이터 로딩
class CustomTextDataset(Dataset):
def __init__(self, file_path, tokenizer):
with open(file_path, "r", encoding="utf-8") as f:
self.data = f.readlines()
self.tokenizer = tokenizer
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
text = self.data[idx].strip()
tokens = self.tokenizer(text)
return tokens
# 예제 데이터셋 로딩
dataset = CustomTextDataset("data/text_data.txt", tokenizer)
loader = DataLoader(dataset, batch_size=4, shuffle=True)
4. 정리
이번 포스팅에서는 PyTorch를 활용하여 이미지 및 텍스트 데이터를 로딩하는 방법을 살펴보았습니다.
torchvision.datasets
과ImageFolder
를 활용하여 이미지 데이터를 로딩하는 방법torch.utils.data.Dataset
을 상속하여 커스텀 데이터셋을 만드는 방법torchtext.datasets
을 사용하여 텍스트 데이터를 로딩하는 방법- 커스텀 텍스트 데이터셋을 정의하는 방법
PyTorch의 데이터 로딩 기능을 활용하면 딥러닝 모델을 보다 쉽게 학습시킬 수 있습니다.
'PyTorch' 카테고리의 다른 글
PyTorch의 nn.Module과 nn.Sequential 개념 (0) | 2025.04.09 |
---|---|
PyTorch 데이터 변환 및 Augmentation (0) | 2025.04.08 |
PyTorch Dataset과 DataLoader 활용법 (0) | 2025.04.06 |
PyTorch Autograd 소개 (자동 미분) (0) | 2025.04.05 |
PyTorch Tensor와 NumPy 배열 비교 (0) | 2025.04.04 |