torch에는 데이터를 처리하기 위해 torch.utils.data.DataLoder와 torch.utils.data.Dataset의 두가지 요소를 제공
dataset : 미리 준비된 데이터셋을 불러 올 수 있으며, 가지고 있는 데이터와 라벨을 저장
dataloader : dataset을 데이터에 쉽게 접근할 수 있도록 batch를 설정해 iterable(반복가능객체)로 만듦.
Dataset 관련 모듈
- torch.utils.data: 데이터셋의 표준을 정의하고 데이터셋을 불러오고 자르고 섞는데 쓰는 도구들이 들어있는 모듈입니다.
- torchvision.dataset
- torchtext.dataset
- torchvision.transforms
- torchvision.tils
Dataset의 기본 구성 요소
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self,):
pass
def __len__(self):
pass
def __getitem__(self, idx):
pass
- __init__ 메서드
- 데이터의 위치나 파일명과 같은 초기화 작업을 위해 동작
- 이미지를 처리할 transforms들을 Compose해서 정의
- self.X , self.y , self.feature_names, self.target_names 지정
- __len__ 메서드
- Dataset의 최대 요소 수를 반환하는데 사용
- len_dataset = len(data) 로 지정
- __getitem__ 메서드
- idx번째 데이터를 반환하는데 사용
- 원본 데이터를 가져와서 전처리하고 데이터 증강하는 부분
- X, y 불러와서 텐서처리
DataLoader의 기본 구성 요소
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
batch_sampler=None, num_workers=0, collate_fn=None,
pin_memory=False, drop_last=False, timeout=0,
worker_init_fn=None)
- dataset
- batch_size
: batch size는 하나의 소그룹에 속하는 데이터 수를 의미 - shuffle : 데이터를 섞어서 사용하겠는지
- sampler / batch_sampler
- num_workers
- collate_fn
: zero-padding이나 Variable Size 데이터 등 데이터 사이즈를 맞추기 위해 많이 사용
#PyTorch의 `collate_fn`을 활용하여 다양한 길이의 데이터를 동일한 길이로 패딩하는 방법을 배워봅시다.
#하나의 batch에서 가장 길이가 긴 sample 기준으로 길이를 맞춥니다.
#길이를 맞출 때는 비어있는 오른쪽을 0으로 패딩합니다. 예) 1 1 1 -> 1 1 1 0 0 0
dataloader_example = torch.utils.data.DataLoader(dataset_example,
batch_size=2,
collate_fn=my_collate_fn)
for d in dataloader_example:
print(d['X'], d['y'])
- pin_memory
: DataLoader에서 이걸 True로 바꾸면 Tensor를 CUDA 고정 메모리에 할당 - drop_last
batch_size를 >=1로 설정하면 마지막 batch의 길이가 달라질 수 있음
따라서 batch의 크기에 따른 의존도 높은 함수를 사용할 때 걱정이 되는 경우 마지막 batch를 사용하지 않을 수 있음
'데이터 스터디 > DL' 카테고리의 다른 글
BoW(Bag of Words), DTM (1) | 2023.11.29 |
---|---|
[논문 읽기] GPT-1 : Improving Language Understanding by Generative Pre-Training (OpenAI) (0) | 2023.11.21 |
[Pytorch] 파이토치 nn.Module, nn.funcional (parameter, forward, backward연산) (0) | 2023.11.17 |
[Pytorch] 파이토치 텐서(tensor) 기초함수, 연산 (0) | 2023.11.17 |
[논문 읽기] Attention IS All You Need (Transformer) (0) | 2023.11.15 |