변형 (Transform)
데이터가 항상 ML 알고리즘 학습에 필요한 최종 처리가 된 형태로 제공되지 않는다. 따라서, 변형 (transform)을 통해 데이터를 조작하고 학습에 적합하게 만든다.
모든 TorchVision 데이터셋들은 변형 logic을 갖는, 호출 가능한 객체 (callable)를 받는 매개변수 두 개 특징 (feature)을 변경하기 위한 transform 과 정답 (label)을 변경하기 위한 target_transform을 갖는다. torchvision.transforms 모듈은 주로 사용하는 몇 가지 transform을 제공한다.
FashionMNIST의 feature은 PIL Image 형식이며, 정답 (label)은 정수 (integer)이다. 학습을 하려면 정규화 (normalize)된 tensor 형태의 feature와 원-핫 (one-hot)으로 부호화 (encode)된 tensor 형태의 label이 필요하다. 이러한 transformation을 하기 위해 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))
)
ToTensor()
ToTensor는 PIL image나 mumpy ndarray를 FloatTensor로 변환하고, 이미지의 픽셀의 크기 (intensity) 값을 [0., 1.] 범위로 비례하여 조정 (scale)한다.
Lambda 변형
Lambda 변형은 사용자 정의 람다 (lambda) 함수를 적용한다. 여기에서는 integer를 one-hot으로 encode된 tensor로 바꾸는 함수를 정의한다. 이 함수는 먼저 데이터셋 정답의 개수인 크기 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))
https://tutorials.pytorch.kr/beginner/basics/transforms_tutorial.html
'Python Library > PyTorch' 카테고리의 다른 글
[PyTorch] 모델 계층 (Layer) (0) | 2022.01.13 |
---|---|
[PyTorch] 신경망 모델 구성 (0) | 2022.01.13 |
[PyTorch] DATASET / DATALOADER (0) | 2022.01.13 |
[PyTorch] NumPy 변환 (Bridge) (0) | 2022.01.13 |
[PyTorch] 텐서 속성 (Attribute) / 연산 (Operation) (0) | 2022.01.13 |