반응형
강의 목표
- PyTorch에서 데이터셋을 다루는 방법 이해
- torch.utils.data.Dataset 및 torch.utils.data.DataLoader 클래스 사용법 습득
- 데이터 전처리 및 배치 처리를 통한 효율적인 데이터 관리 방법 이해
강의 내용
1. 데이터셋 다루기
- PyTorch Dataset 클래스
- Dataset 클래스는 데이터셋을 추상화하여 데이터 로드 및 전처리를 쉽게 할 수 있도록 합니다.
- 커스텀 데이터셋을 작성하여 다양한 데이터 형식 지원
import torch
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
sample = self.data[idx]
label = self.labels[idx]
return sample, label
2. DataLoader 사용법
- DataLoader 클래스
- DataLoader는 데이터셋을 배치로 나누고, 데이터셋을 순회할 수 있는 반복자(iterator)를 제공합니다.
- 배치 크기 설정, 셔플링, 병렬 데이터 로딩 지원
from torch.utils.data import DataLoader
# 예시 데이터
data = torch.randn(100, 10) # 100개의 샘플, 각 샘플은 10개의 특징
labels = torch.randn(100, 1) # 100개의 샘플에 대한 타겟 값
# 커스텀 데이터셋 생성
dataset = CustomDataset(data, labels)
# DataLoader 생성
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)
# DataLoader 사용 예시
for batch_data, batch_labels in dataloader:
print(batch_data, batch_labels)
3. 데이터 전처리
- 데이터 전처리 및 변환
- torchvision.transforms 모듈을 사용하여 이미지 데이터 전처리
- 사용자 정의 변환 작성
from torchvision import transforms
# 이미지 데이터 전처리 예시
transform = transforms.Compose([
transforms.Resize((128, 128)),
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# 사용자 정의 변환 예시
class AddGaussianNoise(object):
def __init__(self, mean=0.0, std=1.0):
self.mean = mean
self.std = std
def __call__(self, tensor):
return tensor + torch.randn(tensor.size()) * self.std + self.mean
def __repr__(self):
return self.__class__.__name__ + '(mean={}, std={})'.format(self.mean, self.std)
transform_with_noise = transforms.Compose([
transforms.Resize((128, 128)),
transforms.ToTensor(),
AddGaussianNoise(0.0, 0.1)
])
4. 데이터셋 분할
- 훈련 데이터셋과 검증 데이터셋으로 분할
- torch.utils.data.random_split 사용
from torch.utils.data import random_split
# 데이터셋 분할
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])
# DataLoader 생성
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=16, shuffle=False)
5. 실습 및 과제
- 실습 과제
- 커스텀 데이터셋 작성 및 DataLoader를 사용하여 데이터 로드
- 이미지 데이터 전처리 및 변환 적용
- 데이터셋을 훈련과 검증 데이터셋으로 분할하고, 각 데이터셋에 대한 DataLoader 작성
# 실습 과제 예시
import torch
from torch.utils.data import Dataset, DataLoader, random_split
from torchvision import transforms
class CustomDataset(Dataset):
def __init__(self, data, labels, transform=None):
self.data = data
self.labels = labels
self.transform = transform
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
sample = self.data[idx]
label = self.labels[idx]
if self.transform:
sample = self.transform(sample)
return sample, label
# 예시 데이터
data = torch.randn(100, 3, 32, 32) # 100개의 이미지 데이터 (3채널, 32x32)
labels = torch.randint(0, 10, (100,)) # 100개의 레이블 (0~9)
# 데이터 전처리 변환
transform = transforms.Compose([
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
# 커스텀 데이터셋 생성
dataset = CustomDataset(data, labels, transform=transform)
# 데이터셋 분할
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])
# DataLoader 생성
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=16, shuffle=False)
# DataLoader 사용 예시
for batch_data, batch_labels in train_loader:
print(batch_data, batch_labels)
- 과제 제출
- Jupyter Notebook 파일로 제출
- 제출 기한: 다음 강의 시작 전까지
반응형
'AI Framework > PyTorch' 카테고리의 다른 글
[PyTorch] 7주차: CNN (Convolutional Neural Network) (0) | 2024.05.30 |
---|---|
[PyTorch] 6주차: 모델 훈련 및 평가 (0) | 2024.05.30 |
[PyTorch] 4주차: 신경망 기본 구조 (0) | 2024.05.30 |
[PyTorch] 3주차: 자동 미분과 Autograd (0) | 2024.05.30 |
[PyTorch] 2주차: PyTorch의 기본 연산 (0) | 2024.05.30 |