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
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 |