2021 네이버 부스트캠프 - Ai tech

Week_3 Pytorch - Dataset & Dataloader

미미수 2021. 8. 20. 01:43

Pytorch에서는 Data를 처리할때 Dataset과 Dataloader라는 클래스를 사용한다.

오늘은 각각의 클래스들이 어떤 구조를 갖고 있고 무슨 역할을 하는지 알아보겠다.


모델을 학습시키기 위해서는 Data가 필수적이다.

데이터 수집부터, 클렌징(쓰레기 값 제거), 전처리 등등을 거친 Data가 주어졌을때,

이 Data는 크게 두개의 과정을 거쳐서 실제 모델에 피딩된다.

 

과정을 나누는 기준은 data를 어떤 묶음으로 보느냐로 생각하면 편하다.

 

예를들면, 공장에서 내가 좋아하는 초코파이를 생산할때,

Dataset : 초코파이 하나하나를 같은 형식으로 만듬

Dataloader : 초코파이 8개를 한상자에 넣어서 출고시킴. 정도로 이해하면 된다.

 

이제 각각의 클래스가 어떤 역할을 하는지 살펴보자.

 

1. Dataset

: 데이터를 입력하는 방식의 표준화

 = Image, Text, Audio 등등, 각기 다른 data type과 data특성에 따라 다르게 정의되는 Class

 

 

[간단 예시]

class CustomDataset(Dataset):

	def __init__(self, text, labels): # 자연어 처리 예시
    		self.labels = labels
        	self.data = text
        
    	def __init__(self, PATH): # Data path받아와서 처리하는 경우도 있음
    		self.data = pd.read_csv(PATH)
        	self.X = self.data~어쩌구
        	self.y = self.data~어쩌구
            
        def __len__(self):
        	return len(self.labels)
        
       	def __getitem__(self,idx):
        	label = self.labels[idx]
            	text = self.data[idx]
            	sample = {"Text": text, "CLASS":label"}
            	return sample

 

여러 메서드를 사용할 수 있지만 가장 기본적인 메소드는 아래와 같다. 

__init__
데이터의 위치나 파일명과 같은 초기화 작업을 위해 동작.

일반적으로 CSV파일이나 XML파일과 같은 데이터를 이때 불러온다.


__len__
Data의 전체 길이 반환

__getitem__
데이터셋의 idx번째 데이터를 반환

 

 

 

Dataset class는 한번 제대로 만들어놔야 뒤에서 수월하고, 협업시 후속 연구자나 동료에게 고통 or 환희를 안겨줄 수 있으니 표준화된 처리방법을 잘 구성하는게 중요합니다!!

 

 

 

2. DataLoader

: 데이터의 Batch를 생성해주는 클래스

 = 실제로 모델에 들어가서 학습 전 데이터를 최종적으로 변환하는 클래스. 갈무리 단계

 

 

[간단 예시]

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)

 

위 코드는 PyTorch에서 구현한 DataLoader class이다.

인자를 많이 받는다. 가장 중요한건 batch_size, sampler정도다. 

자세한건 문서 참고

 

 

 

 


transforms 클래스는 때에따라 필요할 수도 아닐수도 있다.

 

주로 이미지가 data로 주어졌을때 toTensor를 사용해 텐서로 변환시키거나,

data augmentation을 하기도 한다. 

 

아래는 data 처리의 전반적인 구조를 나타낸 것이다. 흐름이해 !!