PyTorch:如何在Transfer Learning教程中计算平均值和stds?

All*_*len 4 python pytorch

我正在浏览PyTorch Transfer Learning教程:link

在数据增强阶段,有以下步骤来规范化图像:

transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
Run Code Online (Sandbox Code Playgroud)

我能理解为什么会这样做,但我找不到平均值和标准值是如何计算的?我试着计算列车数据集的平均值,平均值是:

array([ 0.11727478,  0.04542569, -0.28624609], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

nnn*_*mmm 8

你的号码对我来说似乎不对; 由于ToTensor变换的输出范围为[ 0.0,1.0 ],因此不应该得到负平均值.

如果我计算平均值

traindata = datasets.ImageFolder(data_dir + '/train', transforms.ToTensor())
image_means = torch.stack([t.mean(1).mean(1) for t, c in traindata])
image_means.mean(0)
Run Code Online (Sandbox Code Playgroud)

我得到(0.5143, 0.4760, 0.3487)了验证集(0.5224, 0.4799, 0.3564).这些更接近教程中的数字.搜索特定数字,您将看到它们出现在Imagenet示例中,因此我猜测它们是Imagenet数据集的平均值,其中教程数据集是子集.