【PyTorch学习笔记 - 03】 Transforms
数据并不总是以训练机器学习算法所需的最终处理形式出现。我们使用变换对数据进行一些处理,使其适合训练。
图像的背后依然是数字,是有一堆数字以特定的规律组合而成。深度学习模型的训练需要输入不是一张张的图片,而是每张图片背后的数字组合。因此,需要对对象进行转换。因为直接将图片输入模型是不可行的。解决这个问题很好的方式就是pytorch的这个函数,tansform。
所有的TorchVision datasets都有两个参数——transform
用于修改特征,target_transform
用于修改标签——这两个参数接受包含转换逻辑的可调用对象。torchvision.transforms模块提供了一些常用的现成转换方法。
FashionMNIST数据集的特征采用PIL图像格式,标签为整数。对于训练,我们需要将特征转换为归一化张量,将标签转换为独热编码张量。为实现这些转换,我们使用ToTensor
和Lambda
。
import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambdads = 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变换应用任何用户定义的Lambda函数。在这里,我们定义一个函数,将整数转换为独热编码张量。它首先创建一个大小为10的零张量(我们数据集中标签的数量),然后调用scatter_,该函数在标签 y
给出的索引上分配一个value=1
。
target_transform = Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))