CIFAR-10 无意义的标准化值

Sül*_*gin 5 python neural-network deep-learning conv-neural-network pytorch

我尝试为 CIFAR-10 数据库构建神经网络。我使用 Pytorch 框架。

我对数据加载步骤有疑问。

transform_train = T.Compose([
    T.RandomCrop(32, padding=4),
    T.RandomHorizontalFlip(),
    T.ToTensor(),
    T.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])

trainset = tv.datasets.CIFAR10(root=root, train=True, download=True, transform=transform_train)
Run Code Online (Sandbox Code Playgroud)

这是数据加载步骤的正常步骤。在加载数据时,我正在标准化值。在我的项目开始时,我发现下面一行。

T.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
Run Code Online (Sandbox Code Playgroud)

在我搜索更好的变换值后,我找到了这个值。

T.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
Run Code Online (Sandbox Code Playgroud)

我没有找到为什么使用这些值的解释。您有这些值的描述吗?

小智 3

我想你可以看看这里

前三个值是每个通道的平均值,而第二个三元组是标准差。

  • `(0.2023, 0.1994, 0.2010)` 不是 CIFAR10 中每个通道的标准差,它似乎是*每个图像*中每个通道的标准差的平均值。特别是在 CIFAR10 中,它没有太大区别,但使用常规 std 计算可能会更好。 (2认同)