본문 바로가기

pytorch

파이토치 입력 파이프라인 구축

파이토치의  전처리 파이프라인 구축 클래스, Dataset 과  DataLoader 의 구축

텐서에서 파이토치 DataLoader 만들기

import torch
from torch.utils.data import DataLoader

t = torch.arange(6, dtype=torch.float32)
data_loader = DataLoader(t)

for item in data_loader:
    print(item)
    
>>>
tensor([0.])
tensor([1.])
tensor([2.])
tensor([3.])
tensor([4.])
tensor([5.])

데이터셋의 개별 원소 순환

 

배치 크기 3의 배치를 만들려면 batch_size 매개변수를 사용한다.

data_loader = DataLoader(t, batch_size=3, drop_last=False)
for i, batch in enumerate(data_loader, 1):
    print(f'배치 {i}:', batch)
    
>>>
배치 1: tensor([0., 1., 2.])
배치 2: tensor([3., 4., 5.])

이 데이터셋에서 두 개의 배치 생성, 

마지막 배치 삭제

DataLoader 를 사용하여 데이터셋을 자동 배치 또는 사용자 정의 배치로 구성할 수 있다.

 

두 개의 텐서를 하나의 데이터셋으로 연결

import torch
from torch.utils.data import DataLoader
from torch.utils.data import Dataset

torch.manual_seed(1)

t_x = torch.rand([4, 3], dtype=torch.float32)
t_y = torch.arange(4)

class JointDataset(Dataset):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __len__(self):
        return  len(self.x)
    
    def __getitem__(self, idx):
        return self.x[idx], self.y[idx]
    
joint_dataset = JointDataset(t_x, t_y)

for example in joint_dataset:
    print('x : ', example[0], 'y : ', example[1])

사용자 정의 Dataset 클래스는 데이터 로더가 사용할 두 개의 메서드를 포함해야 한다.

  • __init__() : 기존 배열 읽기, 파일 로드, 데이터 필터링 등 초기화 로직
  • __getitem__() : 주어진 인덱스에 해당하는 샘플의 반환

사용자 정의 데이터셋 클래스를 사용하여 t_x, t_y 의 조인트 데이터셋을 만든다. 

getitem 메서드는 주어진 잉ㄴ덱스에 해당하는 self.x, self.y  의 데이터를 반환하는데 이 두 값을 튜플로 반환하게 된다.

때문에 example 튜플로 반환된 두 값을 인덱스 번호를 통해 접근하게 되는 것 

 

 

텐서 형식의 데이터셋인 경우 간단하게 TensorDataset 을 활용하아ㅕ 조인트 데이터셋을 생성할 수 있다.