1. 데이터를 모은다
2. Dataset class를 이용하여서
__init__() : 시작할 때의 초기 조건 (이미지를 Tensor로 변환시키기 등의 모든 처리를 해줄 필요는 없다)
__len__() : 데이터의 길이를 반환
__getitem__(): Map-Style : 하나의 데이터를 불러올 때 어떻게 반환할지 (주로 index를 가지고 논다)
3. 이 Dataset class 를 어떻게 바꿀지를 transforms class 로 지정을 해준다
ex) 데이터를 전처리 하는 부분(이미지 중앙정렬), 데이터를 tensor로 바꾸는 부분 등등
4. Model로 데이터를 보내기전에 DataLoader를 통해 형식에 맞춰 데이터를 묶어서 Model한테 넘긴다
<from torch.utils.data import Dataset>
class CustomDataset(Dataset):
def __init__(self, text, labels): # 초기 데이터 생성 방법 ex) image : data의 경로 정의 등등
self.labels = labels
self.data = text
def __len__(self):
return len(self.labels)
def __getitem__(self, idx):
label = self.labels[idx]
text = self.data[idx]
sample = {"Text": text, "Class": label} #꼭 dict일 필요 x -> 분류에서는 주로 dict 사용
return sample
<from torch.utils.data import DataLoader>
DataSet : 하나의 데이터를 어떻게 가져올 것인가?
DataLoader : 여러개의 데이터를 묶어서 모델에 전달(주로 여기에서 Tensor변환이 일어난다)
text = ['Happy', 'Amazing', 'Sad', 'Unhapy', 'Glum']
labels = ['Positive', 'Positive', 'Negative', 'Negative', 'Negative']
MyDataset = CustomDataset(text, labels) #데이터를 가져옴
MyDataLoader = DataLoader(MyDataset, batch_size=2, shuffle=True)
next(iter(MyDataLoader))
#{'Text': ['Sad', 'Happy'], 'Class': ['Negative', 'Positive']}
MyDataLoader = DataLoader(MyDataset, batch_size=3, shuffle=True)
for dataset in MyDataLoader:
print(dataset)
#{'Text': ['Sad', 'Amazing', 'Happy'], 'Class': ['Negative', 'Positive', 'Positive']}
#{'Text': ['Unhapy', 'Glum'], 'Class': ['Negative', 'Negative']}
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 : 데이터를 어떻게 뽑을 지 에 관한 index를 지정
-collate_fn : 기존은 [[Data,label],[Data,label],[Data,label]..]인데
이걸 [[Data,Data,Data...],[label,label,label...]]이런식으로 바꿔줌
=> Variable length를 다룰 때 (Text 같은거) 많이 사용(padding과 같이 사용 (추후 정리예정))
Torchvision.datasets 에 가보면 데이터가 엄청 많이 있다(클론 코딩해보는 걸 추천)
'AI Track > AI Basic' 카테고리의 다른 글
[Pytorch] Pytorch 압축정리 (0) | 2023.06.04 |
---|---|
[Pytorch Basic] 모델을 가져와서 Fine Tuning하기 (0) | 2022.10.03 |
[Basic Pytorch]AutoGrad & Optimizer (0) | 2022.10.02 |
[Basic Pytorch]Pytorch 프로젝트 구조 (0) | 2022.10.02 |
[Basic Pytorch]Pytorch의 기본 (0) | 2022.10.01 |