他们如何知道均值和std(变换的输入值)。

时间:2019-08-17 01:30:13

标签: pytorch dataloader

问题与来自PyTorch网站的the data loading tutorial有关。我不知道他们如何写入in转换的mean_pixstd_pix的值。无需计算即可归一化

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

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]对我来说并不明显。他们如何得到它们?为什么它们等于这些?

1 个答案:

答案 0 :(得分:2)

对于归一化input[channel] = (input[channel] - mean[channel]) / std[channel],应从 training 数据集中获取平均值和标准偏差值。

此处,均值= [0.485,0.456,0.406],std = [0.229,0.224,0.225]是Imagenet数据集的均值和标准差。

  

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

torchvision中用于转移学习的预训练模型已在Imagenet上进行了预训练,因此使用其均值和标准差可以对模型进行微调。

如果要从头开始训练模型,最好使用训练数据集(在这种情况下为人脸数据集)的均值和标准差。除此之外,在大多数情况下,Imagenet suffice的均值和标准差可以解决您的问题。