본문 바로가기
Pytorch

[Pytorch] Custom dataset & dataloader 만들기

by xangmin 2021. 6. 21.
반응형

custom dataset / dataloader가 필요한 이유

 점점 많은 양의 data를 이용해서 딥러닝 모델을 학습시키는 일이 많아지면서 그 많은 양의 data를 한번에 불러오려면 시간이 오래걸리는 것을 넘어서서 RAM이 터지는 일이 발생한다. 데이터를 한번에 다 부르지 않고 하나씩만 불러서 쓰는 방식을 택하면 메모리가 터지지 않고 모델을 돌릴 수 있다. 그래서 모든 데이터를 한번에 불러놓고 쓰는 기존의 dataset말고 custom dataset을 만들어야할 필요가 있다. 또한 길이가 변하는 input에 대해서 batch를 만들기 위해서는 dataloader에서 batch를 만드는 부분을 수정해야할 필요가 있어 custom dataloader를 사용해야 한다. 그래서 dataset과 dataloader 클래스가 어떻게 구성되어있는 지 살펴보고, 나는 어떤 식으로 custom dataset/dataloader를 정의하는지 설명해보겠다. 

 

dataset

dataset class는 전체 dataset을 구성하는 단계이다. input으로는 전체 x(input feature)과 y(label)을 tensor로 넣어주면 된다. dataset의 구성은 아래와 같다.

 

  • __init__(self): 데이터 셋을 가져와서 전처리를 해주는 기능
  • __get_item__(self, index): 데이터 셋에서 한 개의 데이터를 가져오는 함수를 정의 (여기서 tensor를 return해야함)
  • __len__(self): 데이터 셋의 전체 길이를 반환

 

import torch
import torch.utils.data as data

class BasicDataset(data.Dataset):
    def __init__(self, x_tensor, y_tensor):
        super(BasicDataset, self).__init__()

        self.x = x_tensor
        self.y = y_tensor
        
    def __getitem__(self, index):
        return self.x[index], self.y[index]

    def __len__(self):
        return len(self.x)

 

Reference

https://sanghyu.tistory.com/90

https://data-panic.tistory.com/21

 

 

 

반응형

'Pytorch' 카테고리의 다른 글

[Pytorch] Numpy에서 Tensor로  (0) 2021.06.21
[Pytorch] CNN을 이용한 MNIST  (0) 2021.06.07
[Pytorch] DNN을 이용한 MNIST  (0) 2021.06.07
[Pytorch] 튜토리얼(2)  (0) 2021.05.17
[Pytorch] 튜토리얼(1)  (0) 2021.05.17

댓글