1+ '''
2+ 이미지 데이터는 촬영된 환경에 따라 명도나 채도 등이 서로 모두 다르기 때문에
3+ 영상 기반 딥러닝 모델을 학습시키기 전에 모든 이미지들을 동일한 환경으로 맞춰주는 게 중요!
4+ >> 전체 이미지에 대한 화소 값의 mean과 standard deviation을 구하여 일괄 적용해야 함.
5+ >> Imagenet 데이터 세트에서 계산된 평균과 표준 편차 사용
6+
7+
8+ torch.Tensor(): T = torch.Tensor() 문장 입력시 T는 tensor자료구조 클래스 생성
9+ torch.tensor(): 어떤 data를 tensor로 copy, 괄호 안에 값이 없다면 에러남
10+
11+ train_set과 test_set모두에 preparation을 진행하는 이유:
12+ The training and testing data should undergo the same data preparation steps
13+ or the predictive model will not make sense.
14+ This means that the number of features for both the training and test set
15+ should be the same and represent the same thing.
16+ '''
17+
18+ from torch .utils .data import DataLoader
19+ from torchvision import transforms , datasets
20+ import numpy as np
21+
22+
23+ def data_load (config ):
24+ name = config ['data_loader_name' ]
25+ if name == 'data_load_only_normalizing' :
26+ data_transform = transforms .Compose ([
27+ transforms .ToTensor (),
28+ transforms .Normalize (mean = [0.4913 , 0.4821 , 0.4465 ],
29+ std = [0.2470 , 0.2434 , 0.2615 ])
30+ ])
31+ elif name == 'data_load_normalizing_and_agumentation' :
32+
33+ data_transform = transforms .Compose ([
34+ transforms .RandomHorizontalFlip (p = 0.5 ), # 이미지를 좌우반전
35+ # transforms.RandomVerticalFlip(p=0.5), # 이미지를 상하반전
36+ transforms .RandomRotation (10 ), # 이미지를 -90 ~ 90에서 랜덤하게 rotate
37+ # transforms.RandomResizedCrop(size = (32,32)) # 이미지의 임의의 부분을 확대하여 Resize
38+ # transforms.ToPILImage(mode = None): # PILImage로 변환
39+
40+ transforms .ToTensor (), # 이미지를 tensor_type로 변환
41+ # transforms.RandomApply(transforms = data_transform, p = 1.0), # agumentation을 전체 데이터에서 임의적으로 골라서 취함.
42+ # 왜 0.5, 0.5, 0.5를 넣어야 하는가?
43+ # >> 직접 mean과 std를 구하면 mean = [0.49139968 0.48215841 0.44653091], std = [0.24703223 0.24348513 0.26158784]
44+ # channel은 3개
45+ transforms .Normalize (mean = [0.4913 , 0.4821 , 0.4465 ], std = [0.2470 , 0.2434 , 0.2615 ]) # tensor의 데이터 수치를 정규화한다.
46+ # transforms.Normalize((0.5), (0.5))) -> -1 ~ 1 사이의 값으로 normalized # output[channel] = (input[channel] - mean[channel]) / std[channel]
47+ ])
48+ elif name == 'data_load_rainbow' :
49+ data_transform = transforms .Compose ([
50+ transforms .RandomHorizontalFlip (p = 0.5 ), # 이미지를 좌우반전
51+ transforms .RandomRotation (10 ), # 이미지를 -90 ~ 90에서 랜덤하게 rotate
52+
53+ transforms .ToTensor (), # 이미지를 tensor_type로 변환
54+ # transforms.RandomApply(transforms = data_transform, p = 1.0), # agumentation을 전체 데이터에서 임의적으로 골라서 취함.
55+ # 왜 0.5, 0.5, 0.5를 넣어야 하는가?
56+ # >> 직접 mean과 std를 구하면 mean = [0.49139968 0.48215841 0.44653091], std = [0.24703223 0.24348513 0.26158784]
57+ # channel은 3개
58+ transforms .Normalize (mean = [0.4913 , 0.4821 , 0.4465 ], std = [0.2470 , 0.2434 , 0.2615 ]) # tensor의 데이터 수치를 정규화한다.
59+ # transforms.Normalize((0.5), (0.5))) -> -1 ~ 1 사이의 값으로 normalized # output[channel] = (input[channel] - mean[channel]) / std[channel]
60+ ])
61+
62+ else :
63+ print ("There was no name in DataLoader_Name" )
64+
65+
66+ train_set = datasets .CIFAR10 (root = '/data/Github_Management/StartDeepLearningWithPytorch/Chapter03/cifar10' ,
67+ train = True ,
68+ download = True , # If true, downloads the dataset from the internet and puts it in root directory. If dataset is already downloaded, it is not downloaded again.
69+ transform = data_transform )
70+
71+ test_set = datasets .CIFAR10 (root = '/data/Github_Management/StartDeepLearningWithPytorch/Chapter03/cifar10' ,
72+ train = False ,
73+ download = True ,
74+ transform = data_transform
75+ )
76+
77+ # print(train_set.data.mean(axis = (0,1,2)) / 255)
78+ # print(train_set.data.std(axis = (0,1,2)) / 255)
79+
80+ # print(test_set.data.mean(axis = (0,1,2)) / 255)
81+ # print(test_set.data.std(axis = (0,1,2)) / 255)
82+
83+ train_loader = DataLoader (train_set ,
84+ batch_size = 64 , #['train_batch_size'],
85+ num_workers = config ['num_workers' ],
86+ shuffle = True )#config['train_dataset_shuffle'])
87+
88+ test_loader = DataLoader (test_set ,
89+ batch_size = 64 , #config['test_batch_size'],
90+ num_workers = config ['num_workers' ],
91+ shuffle = False ) #config['test_dataset_shuffle'])
92+
93+
94+ classes = ('plane' , 'car' , 'bird' , 'cat' , 'deer' ,
95+ 'dog' , 'frog' , 'horse' , 'ship' , 'truck' )
96+
97+ return train_loader , test_loader , classes # train
98+
99+
100+
0 commit comments