pytorch - 他们怎么知道mean和std,transforms.Normalize的输入值

标签 pytorch dataloader

问题是关于 PyTorch 网站上的 the data loading tutorial。我不知道他们是如何写出transforms.Normalize 中的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] 的值对我来说并不明显。他们如何得到它们?为什么他们等于这些?

最佳答案

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

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

On Imagenet, we’ve done a pass on the dataset and calculated per-channel mean/std. check here



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

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

关于pytorch - 他们怎么知道mean和std,transforms.Normalize的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532661/

相关文章:

python - pytorch 数据集中每个类的实例数

pytorch - 不使用多处理,但在使用 PyTorch DataLoader 时在 google colab 上出现 CUDA 错误

python - Pytorch 中(据称)空批处理的运行时错误

image-processing - state_dict 中缺少键

python - 如何使用滑动窗口调整 PyTorch 张量的大小?

python - 如何将字符串列表转换为 pytorch 中的张量?

pytorch - 创建一个 nnModule 只是身份

python - 将 PIL 图像转换为张量时,为什么像素会发生变化?

python - 在 PyTorch 中沿给定轴进行洗牌

python - 3D CNN 在图像序列上的输入形状应该是什么?