Normalization(정규화)
•
값의 범위(scale)을 0-1 사이로 변경
•
학습 전에 scaling하는 이유
◦
머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
◦
딥러닝에서 Loacal Minima에 빠질 위험 감소(학습 속도 향상)
비정규화
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda
ds1 = datasets.FashionMNIST(
root="fashion_data",
train=True,
download=True
)
Python
복사
> len(ds1)
60000
> ds1[10]
(<PIL.Image.Image image mode=L size=28x28>, 0)
Python
복사
ds_features, ds_label = ds1[1] # (features, target)
> np.array(ds_features).shape
(28, 28)
Python
복사
> np.array(ds_features)
ndarray (28, 28)
Python
복사
> np.array(ds_features).max(), np.array(ds_features).min()
(255, 0)
> ds_label
0
Python
복사
정규화
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda
ds2 = datasets.FashionMNIST(
root="dafashion_datata",
train=True,
download=True,
transform=ToTensor(), # Features 정규화
# target = 5
# -> (0.0, 0.0, 0.0, 0.0, 1, 0.0, 0.0, 0.0, 0.0, 0.0)
# -> 원핫인코딩으로 변환
target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float)\
.scatter_(0, torch.tensor(y), value=1)) # target 정규화
)
Python
복사
> ds_feautres, ds_label = ds2[1]
> np.array(ds_feautres).max(), np.array(ds_feautres).min()
(1.0, 0.0)
> ds_feautres.shape
torch.Size([1, 28, 28])
> ds_label # 0 -> T-Shirt
tensor([1., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
> len(ds_label), ds_label.shape
(10, torch.Size([10]))
Python
복사