transform
과 정답(label)을 변경하기 위한target_transform
] 을 갖습니다.ToTensor
와 Lambda
를 사용합니다. import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda
ds = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor(),
target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)
root
는 앞서 계속 봤듯 데이터가 있을 공간입니다. train
는 훈련 여부입니다downloda
는 root에 데이터가 없을 경우 인터넷을 통해 다운로드를 할지 말지를 결정합니다.tranform = ToTensor()
는 데이터 형식을 텐서로 바꿔줍니다.target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
torch.zero(10,dtype=torch.float)
는 0으로 채워진 크기 10의 텐서이며 데이터 유형은 float형입니다..scatter_(0, torch.tensor(y),value=1)
는 이전 단게에서 생성한 텐서에 적용되는 메소드입니다. 이방법은 텐서의 지정된 차원을 따라 값을 분산시키는데 사용됩니다.torch.tensor(y)
는 값이 분산될 인덱스를 포함하는 텐서입니다. y는 입력 클래스 색인입니다.value=1
는 지정된 인덱스에 할당될 값입니다.-PIL Image나 Numpy ndarray
를 FloatTensor
로 변환하고, 이미지의 픽셀의 크기(intensity)값을 [0.,1.] 범위로 비레하여 조정합니다.
Lambda
변형은 사용자 정의 람다 함수를 적용합니다. 여기서 정수를 one-hot으로 부호화된 텐서로 바꾸는 함수를 정의합니다. 이 함수는 먼저 (데이터셋 정답의 개수인) 크기 10인 zero tensor를 만들고, scatter_를 호출하여 주어진 정답 y에 해당하는 인덱스에 value = 1 을 할당합니다.-코드(위에서 봄)
target_transform = Lambda(lambda y: torch.zeros(
10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))