【问题标题】:How do they know mean and std, the input value of transforms.Normalize他们如何知道平均和标准,transforms.Normalize 的输入值
【发布时间】:2025-12-06 15:15:02
【问题描述】:

问题是关于 PyTorch 网站上的the data loading tutorial。我不知道他们是怎么写in transforms.Normalize的mean_pixstd_pix的值没有计算

我在 * 上找不到与此问题相关的任何解释。

import torch
from torchvision import transforms, datasets

data_transform = transforms.Compose([
        transforms.RandomSizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225])
    ])
hymenoptera_dataset = datasets.ImageFolder(root='hymenoptera_data/train',
                                           transform=data_transform)
dataset_loader = torch.utils.data.DataLoader(hymenoptera_dataset,
                                             batch_size=4, shuffle=True,
                                             num_workers=4)

mean=[0.485,0.456, 0.406]std=[0.229, 0.224, 0.225] 的值对我来说并不明显。他们如何得到它们?为什么它们等于这些?

【问题讨论】:

  • 我相信这些是 imagenet 数据集的平均值和标准差

标签: pytorch dataloader


【解决方案1】:

对于标准化input[channel] = (input[channel] - mean[channel]) / std[channel],均值和标准差值将取自训练数据集。

这里,mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] 是 Imagenet 数据集的均值和标准值。

在 Imagenet 上,我们对数据集进行了传递并计算了每个通道的均值/标准差。 check here

torchvision 中提供的用于迁移学习的预训练模型在 Imagenet 上进行了预训练,因此使用它的均值和标准差来微调您的模型是很好的。

如果您尝试从头开始训练模型,最好使用训练数据集(在本例中为人脸数据集)的均值和标准差。除此之外,在大多数情况下,Imagenet suffice 的平均值和标准对于您的问题。

【讨论】:

  • 如何从数据集中计算均值和标准差?
  • 谢谢@crypdick