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

PyTorch中transform与target_transform参数的区别是什么

PyTorch TorchVision中transform与target_transform参数的核心区别

这两个参数都是TorchVision数据集类初始化时可传入的可调用对象,触发时机完全一致:都是调用__getitem__读取单条样本时,在返回数据前对内容做自定义处理,二者的核心差异完全集中在作用目标和使用场景上:

  • 作用对象有本质区别
    这是最核心的划分边界:
    • transform的入参是单条原始样本本身,也就是数据集存储的输入主体数据。比如图像分类、检测任务里的原始图片,语义分割任务里的原始输入影像,都属于被transform处理的对象。
    • target_transform的入参是单条样本对应的标注内容,也就是和输入样本匹配的标签/真值。比如分类任务里的类别索引、检测任务里的边界框坐标与类别标注、分割任务里的像素级掩码,都属于被target_transform处理的对象。
  • 承载的处理逻辑完全不同
    • transform一般承载所有和输入样本相关的预处理、数据增强逻辑:最常用的包括把PIL图片/NumPy数组转成PyTorch张量的ToTensor()、按数据集均值方差做数值缩放的Normalize()、训练阶段用的随机裁剪、翻转、色彩扰动、随机擦除等数据增强操作、统一输入尺寸的Resize()等。
    • target_transform一般只承载标签格式适配类的逻辑:比如把分类任务的整数类别索引转成one-hot张量、把边界框从XYXY坐标格式转成模型要求的XYWH格式、把标注掩码从PIL格式转成张量、把多标签任务的标签列表转成固定维度的0-1张量等。这类逻辑一般是确定性的格式转换,很少加入随机操作——如果需要做和样本绑定的标注变换(比如随机裁剪图片时同步调整边界框坐标),不要拆分到两个独立的transform里写随机逻辑,否则会出现样本和标签变换不同步、匹配错误的问题,这类场景建议直接使用TorchVision的transforms.v2模块做样本-标注的联合变换。

下面是最基础的使用示例,以加载FashionMNIST数据集为例:

from torchvision import datasets, transforms
import torch

# 定义样本预处理逻辑:转张量、做归一化
sample_trans = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5,), std=(0.5,))
])

# 定义标签转换逻辑:把0-9的类别ID转成10维one-hot张量
def label_trans(label_id):
    one_hot_label = torch.zeros(10, dtype=torch.float32)
    one_hot_label[label_id] = 1.0
    return one_hot_label

# 初始化训练集
train_set = datasets.FashionMNIST(
    root="./local_data_dir",
    train=True,
    download=True,
    transform=sample_trans,
    target_transform=label_trans
)

# 取单条样本验证处理结果
img_tensor, label_tensor = train_set[0]
print(f"处理后输入样本形状:{img_tensor.shape}")  # 输出 torch.Size([1, 28, 28])
print(f"处理后标签形状:{label_tensor.shape}")     # 输出 torch.Size([10])

补充提示:早期版本的TorchVision没有提供联合变换能力,部分开发者会自己写同时返回变换后样本和标签的可调用对象传入transform,变相实现同步增强,这种写法在新版本里已经不推荐,直接用官方的v2变换接口兼容性更好,也不容易出bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:34:03