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
를 참고하라
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) 여부를 정한다.
'오늘의 코딩 > 머신러닝,Deep Learning' 카테고리의 다른 글
[ML]Regularization에 대하여 (0) | 2020.03.30 |
---|---|
재밌는 분야[적대적 훈련(Adversarial training)] (0) | 2020.03.26 |
pytorch transfer learning 모델 설정 중 에러.. (0) | 2020.02.04 |
[pytorch] require_grad, zero_grad(), no_grad() 차이 (0) | 2020.01.28 |
[pytorch] 맨땅에 transfer learning 하기 1 (0) | 2020.01.28 |