본문 바로가기

Programming/PyTorch

[PyTorch] Dataset Types 정리 (Map-style datasets, Iterable-style datasets)

728x90
반응형

파이토치에서는 크게 두 가지 타입의 데이터셋을 지원해줍니다.

 

 

1) Map-style datasets

map-style datasets은 __getitem__()과 __len()__을 구현하는 데이터셋으로 index(key)를 통해 데이터에 접근할 수 있는 경우를 의미합니다.

dataset[index]를 통해 데이터셋의 특정 데이터에 접근할 수 있는 형태입니다.

 

from torch.utils.data import Dataset

class MyMapDataset(Dataset):

    def __init__(self, data):
        self.data = data

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

    def __getitem__(self, index):
        return self.data['text'][index]

 

 

 

2) Iterable-style datasets

Iterable-style datasets은 __iter__() 기능을 구현하는 데이터셋입니다. 

IterableDataset의 하위 클래스 인스턴스로, 데이터셋의 랜덤 읽기가 어렵거나 불가능할 경우에 적합한 데이터셋입니다.

주로 메모리에 학습 데이터를 다 올릴 수 없는 경우 사용이 됩니다.

Map-style dataset의 경우 인덱스를 통해 데이터에 접근할 수 있지만 Iterable-style은 next를 통해서 접근 하기 때문에 sampler를 사용하기 어렵습니다.

따라서 random shuffle을 원할 경우 임의로 미리 shuffle을 진행한 후 사용해야 합니다.

아래 코드를 보면 조금 더 잘 이해가 갈 것 같습니다!

 

from torch.utils.data import IterableDataset

class MyIterableDataset(IterableDataset):

    def __init__(self, data_path):
        self.data_path = data_path

    def __iter__(self):
        iter_csv = pd.read_csv(self.data_path, sep='\t', iterator=True, chunksize=1)
        for line in iter_csv:
            line = line['text'].item()
            yield line

 

 

 

 

 

torch.utils.data — PyTorch 1.10.1 documentation

torch.utils.data At the heart of PyTorch data loading utility is the torch.utils.data.DataLoader class. It represents a Python iterable over a dataset, with support for These options are configured by the constructor arguments of a DataLoader, which has si

pytorch.org

 

PyTorch의 IterableDataset을 사용해서 데이터 불러오기

PyTorch 1.2 이상부터 torch.utils.data 에서는 크게 map-style dataset (torch.utils.data.Dataset) 과 iterable dataset (torch.utils.data.IterableDataset) 의 두 종류의 데이터 클래스를 지원하고 있다. 데이터 사이즈가 클 때는

inmoonlight.github.io

 

 

728x90
반응형

'Programming > PyTorch' 카테고리의 다른 글

[PyTorch] Tensor와 tensor  (0) 2022.01.27
[PyTorch] DataLoader의 역할 및 사용법  (0) 2022.01.25
[PyTorch] torch.nn.Embedding 의 역할  (0) 2021.11.22
[PyTorch] torch.clamp 함수  (0) 2021.11.22
[PyTorch] torch.nn.ModuleList()란?  (0) 2021.11.16