본문 바로가기

오늘의 코딩/머신러닝,Deep Learning

[pytorch] 데이터 불러오기

1. 데이터셋 불러오기

모델 학습에 사용할 데이터셋을 불러오고, 변형한다.

torchvision.datasets.데이터셋 명( root,  train = True , transform = None, target_transform = None, download = False)

#데이터셋 종류

 

MNIST, Fashion-MNIST, KMNIST, EMNIST, QMNIST, FAKEDATA, COCO, LSUN, IMAGENET, CIFAR, SVHN 등

 

 

#파라미터

root - 데이터셋을 저장할 디렉토리 위치

train - 다운받을 데이터셋 종류(train/val/test)

download - True로 할 경우, 인터넷에서 데이터셋을 root 경로에 다운받는다. 데이터가 있을 경우, 재다운하지 않는다.

transform - 이미지를 변형한다.

 

데이터셋 별로 파라미터 설정값이 상이하므로 자세한 내용은

https://pytorch.org/docs/stable/torchvision/datasets.html

 

torchvision.datasets — PyTorch master documentation

torchvision.datasets All datasets are subclasses of torch.utils.data.Dataset i.e, they have __getitem__ and __len__ methods implemented. Hence, they can all be passed to a torch.utils.data.DataLoader which can load multiple samples parallelly using torch.m

pytorch.org

를 참고하라

 

 

2. 이미지 변형하기 Data Argument

transforms.Compose([
transforms.ToPILImage(),
transforms.ToTensor(),
transforms.Normalize(mean=(0.5,), std=(0.5,))
])

#함수

transforms.ToPILImage() - csv 파일로 데이터셋을 받을 경우, PIL image로 바꿔준다.

 

transforms.CenterCrop(size) - 가운데 부분을 size 크기로 자른다.

transforms.Grayscale(num_output_channels=1) - grayscale로 변환한다.

transforms.RandomAffine(degrees) - 랜덤으로 affine 변형을 한다.

transforms.RandomCrop(size) -이미지를 랜덤으로 아무데나 잘라 size 크기로 출력한다.

 

transforms.RandomResizedCrop(size) - 이미지 사이즈를 size로 변경한다

transforms.Resize(size) - 이미지 사이즈를 size로 변경한다

transforms.RandomRotation(degrees) 이미지를 랜덤으로 degrees 각도로 회전한다.

transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333)) - 이미지를 랜덤으로 변형한다.

transforms.RandomVerticalFlip(p=0.5) - 이미지를 랜덤으로 수직으로 뒤집는다. p =0이면 뒤집지 않는다.

transforms.RandomHorizontalFlip(p=0.5) - 이미지를 랜덤으로 수평으로 뒤집는다.

                                              * 글자 이미지를 데이터에 넣을 경우, 뒤집기 설정은 넣지 않는 것이 좋을듯?

 

transforms.ToTensor() - 이미지 데이터를 tensor로 바꿔준다.

transforms.Normalize(mean, std, inplace=False) - 이미지를 정규화한다.

3. 다운받은 데이터셋 불러오기

다운 받은 데이터셋은 DataLoader 함수를 이용해야 모델에 사용할 수 있다.

데이터셋을 배치별로 자르거나, 섞거나 해서 모델에 넣을 데이터 뭉치를 만들어준다.

 

torch.utils.data.DataLoader (불러온 데이터셋 변수, 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, multiprocessing_context=None
)

 

 

#파라미터

batch_size : 모델을 한 번 학습시킬 때 몇 개의 데이터를 넣을지 정한다. 1 배치가 끝날때마다 파라미터를 조정한다.

shuffle : 데이터를 섞을지 정한다.

num_workers : 몇개의 subprocesses를 가동시킬건지 정한다.

drop_last : 배치별로 묶고 남은 데이터를 버릴지 (True) 여부를 정한다.