1 분 소요

모델에 데이터 먹이는 방법

순서 1) Data -> 2) 2) Dataset -> 4) DataLoader -> 모델 3) transforms-> 2)

2) 데이터 수집 collecting , cleaning, preprocessing

2) Dataset init, len, getitem 등 특히 getitem 은 어떤걸 반환할지, map-style을 정함

3) transforms init, call 전처리, 주로 ToTensor()로 tensor 형태로 바꾸는 일 이외에도 CentorCrop() 등등

4) DataLoader batch, shuffle 등

Dataset 클래스

데이터 입력 형태를 정의 데이터를 입력하는 방식의 표준화 image, text, audio에 따라 다르게 입력정의

import torch
from torch.utils.data import Dataset, DataLoader



class CustomDataset(Dataset):

#초기 데이터 생성 방법 지정
	def __init__(self, text, labels):
            self.labels = labels
            self.data = text

#데이터의 전체 길이
    def __len__(self):
            return len(self.labels)

#인덱스 값 넣었을 때 반환되는 데이터의 형태 (X,y)
    def __getitem__(self, idx):
            label = self.labels[idx]
            text = self.data[idx]
            sample = {"Text": text, "Class": label}
            return sample

Dataset 클래스 생성시 유의점

  • 데이터 형태에 따라 각 함수를 다르게 정의함
  • 모든 것을 데이터 생성 시점에 처리할 필요는 없음 ex) 이미지를 tensor로 변환 하는 것은 학습 직전에 해도 된다.
  • 데이터 셋에 대한 표준화 처리 방법 -> 서로에게 도움이 되게
  • 최근에는 HuggingFace 등 표준화된 라이브러리 사용

DataLoader 클래스

Data의 Batch를 생성해주는 클래스 학습 직전(Gpu feed 전) 데이터의 변환을 책임 Tensor로 변환 + Batch 처리

MyDataLoader = DataLoader(MyDataset, batch_size=2, shuffle=True)
next(iter(MyDataLoader))
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, *, prefetch_factor=2, persistent_workers=False)

이중에서 몇개만 보자면

  • sampler,batch sampler 는 shuffle 과는 조금 다르게 데이터를 어떻게 뽑을지 인덱스를 정해주는 방법
  • collate_fn padding 느낌으로다가, 문자들의 크기가 맞지않을 때

참고자료 https://subinium.github.io/pytorch-dataloader/

Casestudy

데이터 다운로드 부터 먹이기까지 해보자

  • Property 함수 class 코드에 자꾸 @property가 나와서 데코레이터 봤는데 쪼끔 다른 것 같다. @property 는 파이썬 내장 함수라서 데코레이터처럼 함수 이름을 따라가지 않아도 되는 듯하다. 상세 정보는 아래 보고 공부함 https://www.daleseo.com/python-property/ property는 외부에 티 내지 않고 내부적으로 클래스의 필드 접근 방법을 바꿀 수 있다는 장점

카테고리:

업데이트:

댓글남기기