You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch加载FashionMNIST时target_transform参数的Lambda()语法疑问

外层Lambda的类型、功能与用法说明
  • 类型说明:这个外层的Lambda不是Python内置的语法关键字,是torchvision.transforms模块提供的官方转换类,使用前需要通过from torchvision.transforms import Lambda导入。
  • 核心功能:它的作用是把用户自定义的任意处理函数,包装成符合torchvision数据集转换接口规范的可调用对象,既可以用来包装图像预处理逻辑传给transform参数,也可以像示例里一样包装标签转换逻辑传给target_transform参数。
  • 代码逻辑解析:内层的lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1)是真正的转换逻辑——把FashionMNIST原本0-9的整数类别标签,转成长度为10的one-hot编码向量:比如标签值为3时,转换后就是索引3位置为1、其余位置全为0的浮点型张量。Lambda做的事就是把这个匿名函数包装成数据集能识别的转换组件,加载样本时会自动触发这个逻辑处理每个标签。
  • 使用方法:你只需要把「接收单个输入值(单张图像/单个标签)、返回转换后结果」的自定义函数(不管是lambda写的匿名函数,还是def定义的普通函数)作为参数传入Lambda()即可。这种写法的兼容性最好,既适配torchvision各版本对转换对象的类型校验,也能直接和ToTensor、Resize这类内置转换一起放到Compose流水线里串联执行。

补充:部分高版本torchvision其实支持直接把自定义lambda函数传给target_transform,不用套一层Lambda,但官方教程和大多数开源代码里保留Lambda包装的写法,主要是为了版本兼容和转换逻辑的统一管理。

对应示例完整可运行代码片段:

import torch
from torchvision import datasets
from torchvision.transforms import Lambda

# 加载FashionMNIST数据集,标签自动转换为one-hot编码
ds = datasets.FashionMNIST(
    root="./dataset",
    train=True,
    download=True,
    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)

内容的提问来源于stack exchange,提问作者Robber Pen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:03:24