반응형
목차
- 변환
- ToTensor()
- 람다 변환
변환 (Transforms)
- 데이터가 항상 기계 학습 알고리즘 훈련에 필요한 형식으로 제공되지는 않음
- 변환을 사용하여 데이터를 조작하고 훈련에 적합하게 만들어야 함
- TorchVision 데이터셋에는 피쳐와 라벨을 모두 변환하기 위한 매개변수 존재 (transform: 피쳐 변환 / target_transform: 레이블 수정)
- torchvision.transforms 모듈은 일반적으로 사용되는 변환을 제공
- FashionMNIST 의 피쳐는 PIL 이미지 형식, 레이블은 정수형
- 학습을 위해 정규화된 텐서인 피쳐와 one-hot 인코딩된 레이블 필요
- 이러한 변환 수행 위해 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 이미지 또는 NumPy ndarray를 FloatTensor로 변환하고 [0., 1.] 범위에서 이미지 픽셀의 강도 값을 조정
람다 변환 (Lambda transforms)
- 람다 변환은 모든 사용자 정의 Lambda 함수를 적용함
- 여기에서는 정수를 one-hot 인코딩된 텐서로 변환하는 함수를 정의
- 크기 10(데이터셋의 레이블 수)의 0 텐서 생성 후 레이블 y가 제공하는 인덱스에 value=1을 할당하는 scatter 함수 호출
- 다른 옵션으로 torch.nn.functional.one_hot 이용 가능
target_transform = Lambda(lambda y: torch.zeros(
10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))
반응형