모델을 학습시키기 위해서는 data가 필수적이다.
실제로 pytorch로 모델 구성 및 학습하는 과정에서 가장 큰 비중을 차지하는 것은 모델에 데이터를 공급해주는 일이다.
(딥러닝에서 가장 중요한 것을 신경망 모델링이 아닌 데이터를 준비하는 단계라고 해도 과언이 아니다.)
가독성, 모듈성을 위해 학습코드와 데이터셋 코드를 분리하는 것이 좋다.
즉, 모델링과 별도로 유지해야 한다. 데이터를 쉽게 불러와주고, 코드의 가독성도 좋은 도구가 있다면 얼마나 편리하겠는가
그래서 pytorch에서는 데이터 처리를 위한 2가지 클래스를 제공한다.
대부분의 머신러닝, 딥러닝 학습에서는 방대한 데이터를 이용하여 분석하기 때문에 데이터를 한번에 잘 불러오지 않는다. 따라서 데이터를 하나씩 불러오는 방식을 이용해야 한다.
그러기 위해서는 전체 data를 tensor로 구성하는 dataset(dataloader를 통해 data를 받아오는 역할)을 상속받아 나만의 dataset을 만들어야 한다.
사용자 정의 Dataset 클래스는 반드시 3개 함수를 구현해야 한다.
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self):
super (CustomDataset,self).__init__()
def __len__(self): ## x와y의 개수가 같으니깐 아무거나로 return해주면 된다.
def __getitem__():
Dataloder는 배치 관리 담당으로써 batch기반의 딥러닝모델 학습을 위해서 mini batch를 만들어주는 역할을 한다. 앞서 만들었던 dataset을 input으로 넣으면 여러 옵션을 통해 mini-batch를 만든다.
iterator 형식이고 우리가 batch_size나 shuffle 유뮤를 설정할 수 있다.
train일때 셔플을 하고 test를 할 때는 shuffle하지 않는다.
from torch.utils.data import Dataloader
dataloader = Dataloader(
dataset,
batch_size = 2,
shuffle = True,
)
dataloader에 있는 자주 쓰이는 옵션들을 알아보자
batch_size : 각 배치 때마다 그 배치 안에 샘플의 사이즈
shuffle : epoch마다 데이터를 섞을지 말지 정하는 것
num_workers : 동시에 처리하는 프로세서의 수, 서버에서 돌릴 때는 num_worker를 조절해서 load속도를 올릴 수 있지만 pc에서는 default=0으로 설정해야 한다.(기본적으로 num_worker를 하나 추가하면 데이터를 불러오는 속도는 20% 증가한다.

