꺼내먹는지식 준

Pytorch Dataset 본문

AI/PyTorch

Pytorch Dataset

알 수 없는 사용자 2022. 1. 25. 13:25

딥러닝에서 가장 중요한 요소는 바로 대용량 데이터이다. 

모델도 중요하지만, 결과를 결정짓는건 결국 데이터라고 말을 할 정도다. 

 

Pytorch에서는 대용량 데이터를 잘 처리해주는 Dataset API 를 제공한다. 

 

Dataset Feeding 

과정에 대한 정리 

1. 데이터의 전처리는 두가지 과정으로 나뉜다. 

1) 데이터 수집, 다룰 수 있도록 처리 

2) ToTensor 즉, 숫자로 변환 

 

2. Dataset 어떻게 시작하고, 길이를 반환하고, item을 call 했을 때 어떻게 반환해줄건지에 대한 것을 정한다. 

 

3. DataLoader를 통해 batch 크기, shuffle 여부, 등등을 정한다. 

 

4. Model에 투입 

 

Dataset 클래스 

데이터 입력 형태를 정의하는 클래스 

데이터 입력 방식 표준화 

Image, Text, Audio 등에 따른 다른 입력 정의

text = ["I love this movie", "This movie sucks", "Kill it!", "I rather die watching this movie", "I wonder if the director's parents are still alive"]
labels = ["Positive", "Negative", "Positive", "Negative", "Negative"]
MyDataset = CustomDataset(text, labels)

간단한 예시로 이러한 형태로 정의 된다. 

 

유의점

데이터 형태에 따라 각 함수를 다르게 정의함 

모든 것을 데이터 생성 시점에 처리할 필요는 없다 : 이미지의 Tensor 변환은 학습에 필요한 시점에 변환, CPU에서는 데이터 변환 GPU에서는 학습 

데이터 셋에 대한 표준화된 처리 방법 제공 필요 : 후속 연구자 또는 동료들에게 공유 가능 

최근에는 HuggingFace 등 표준화된 라이브러리 제공 

 

DataLoader 클래스 

Data의 Batch를 생성해주는 클래스 

학습 직전 데이터 변환을 책임 

Tensor로 변환 + Batch 처리가 메인 업무 

병렬적인 데이터 전처리 코드의 고민 필요

batch_size 지정, shuffle (text, label) 쌍을 한번에 2개씩 섞어서 뽑는 것. 

 

한번의 Epoc = 한번의 DataLoader 

 

DataLoader 클래스

DataLoader(dataset, batch_size = 1 , shuffle = False, 
sample = None, batch_sample = None, num_workers = 0, 
collate_fn = None, pin_memory = False, drop_last = False, 
timeout = 0, worker_init_fn = None, *, prefetch_factor = 2, 
persistent_workers = False)

#여러가지 parameters 중 기억할만한 건 sampler, batch_sampler
#sampler, batch_sampler: 데이터를 shuffle 하지 않고, 대신에 어떻게 뽑을지 index 결정  
#collate_fn: 보통은 [[데이터 , label], [데이터, 레이블]...] 형태를 
[[데이터, 데이터, 데이터], [레이블, 레이블, 레이블]..] 형태등으로 수정 
Variable length 즉 글자 수가 다를 때, 0으로 padding 해줄 때 동일하게 padding을 적용 위해 사용

 

 

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

Torch Tensors  (0) 2022.01.25
Torch Indexing  (0) 2022.01.25
Pytorch Backpropagation(AutoGrad, Optimizer)  (0) 2022.01.25
Pytorch 프로젝트 생성, 배포, 유지보수  (0) 2022.01.24
Pytorch 기본기  (0) 2022.01.24
Comments