04-变换

📅 2026/7/16 15:45:44
04-变换
变换Transforms数据并不总是以训练机器学习算法所需的最终处理形式出现。我们使用**变换transforms**来对数据执行一些操作使其适合训练。所有 TorchVision 数据集都有两个参数——transform用于修改特征target_transform用于修改标签——它们接受包含变换逻辑的可调用对象。torchvision.transforms模块提供了几种常用的现成变换。FashionMNIST 的特征是 PIL Image 格式标签是整数。对于训练我们需要将特征作为归一化的张量将标签作为独热编码one-hot张量。为了进行这些变换我们使用torchvision.transforms.v2API 以及torch.nn.functional.one_hot。importtorch# 导入 PyTorch 核心库importtorch.nn.functionalasF# 导入函数式接口用于 one_hot 等操作fromtorchvisionimportdatasets# 导入视觉数据集模块fromtorchvision.transformsimportv2# 导入数据变换模块 v2 版本dsdatasets.FashionMNIST(# 创建 FashionMNIST 数据集rootdata,# 数据存储路径trainTrue,# 指定为训练集downloadTrue,# 如果数据不存在则下载transformv2.Compose([# 对图像进行变换组合v2.ToImage(),# 将 PIL 图像转为 Image 张量格式v2.ToDtype(torch.float32,scaleTrue)# 转为 float32 类型并缩放到 [0,1]]),target_transformv2.Lambda(# 对标签进行 Lambda 变换lambday:F.one_hot(torch.tensor(y),num_classes10).float()# 将整数标签转为 10 维独热编码浮点张量),)ToImage() 和 ToDtype()torchvision.transforms.v2API 用两步管道取代了旧的ToTensor变换。v2.ToImage将 PIL 图像或 NumPyndarray转换为torchvision.tv_tensors.Image张量v2.ToDtype配合scaleTrue将其转换为float32类型并将像素强度值缩放到 [0., 1.] 范围。Lambda 变换Lambda TransformsLambda 变换应用任何用户定义的 lambda 函数。在这里我们使用torch.nn.functional.one_hot将整数标签转换为大小为 10 的独热编码张量数据集中的标签数量然后将其转换为float类型以匹配预期的数据类型。target_transformv2.Lambda(# 创建 Lambda 变换lambday:F.one_hot(torch.tensor(y),num_classes10).float()# 将整数标签转为 10 维独热编码浮点张量)