machine learning 작업을 위한 API
torch.utils.data.DataLoader
torch.utils.data.Dataset
Dataset: sample & label 저장
DataLoader: Dataset을 iterable로 감싼다.
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
TorchText TorchVision TorchAudio
torchvision.datasetsmodule: CIFAR,COCO 등 실제 vision data에 대한 Dataset을 포함
transform,target_transform: sample, label 각각 변경하기 위해 포함
매개변수
root학습/테스트 데이터가 저장되는 경로
train학습용 or 테스트용 데이터셋 여부를 지정
download=True:root에 데이터가 없는 경우 인터넷에서 다운로드
transform,target_transform: feature, label, transform을 지정
training_data = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor(),
)
test_data = datasets.FashinMINST(
root="data",
train=False,
download=True,
transform=ToTensor(),
)
사용자 정의 Dataset클래스는 3개 함수를 구현해야한다.
__init__ __len__ __getitem__
이미지들은 img_dir에 저장되고
label은 annotations_file csv파일에 별도로 저장된다.
import os
import pandas as pd
from torchvision.io import read_image
class CustomImageDataset(Dataset):
def __init__(self, annotations_file, img_dir,
Dataset->DataLoader인자로 전달
: Dataset을 iterable로 감싸고 자동화된 batch, sampling, shuffle 및 multiprocess data loading을 지원한다.
batch size = 64: dataloader 객체의 각 요소는 64개의 feature과 label을 batch로 반환
import os
import pandas as pd
from torchvision.io import read_image
class CustomImageDataset(Dataset):
def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):
self.img_labels = pd.read_csv(annotations_file, names=['file_name','label'])
self.img_dir = img_dir
self.transform = transform
self.target_transform = target_transform
def __len__(self):
return len(self.img_labels)
def __getitem__(self,idx):
img_path = os.path.join(self.img_dif, self.img_labels.iloc[idx, 0])
image = read_image(img_path)
label = self.img_labels.iloc[idx, 1]
if self.transform:
image = self.transform(image)
if self.target_transform:
label = self.target_transform(label)
return image, label