Pytorch cifar10 图像未归一化

Pytorch cifar10 images are not normalized

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
  
trainset.data[0]

我正在使用上面的代码并期望数据被规范化。但事实并非如此,下面是结果。我需要使用数据方法访问数据以进行更多处理。输出如下。

array([[[ 59,  62,  63],
        [ 43,  46,  45],
        [ 50,  48,  43],
        ...,
        [158, 132, 108],
        [152, 125, 102],
        [148, 124, 103]],

torchvision.transforms.Normalize 只是一个 shift-scale 运算符。给定参数mean"shift")和std"scale"),它会将输入映射到(input - shift) / scale.

由于您在所有三个通道上都使用了 mean=0.5std=0.5,结果 (input - 0.5) / 0.5 如果其统计数据实际上是 mean=0.5,则仅对数据进行归一化] 和 std=0.5 当然不是这样。

考虑到这一点,您应该做的是提供实际数据集的统计信息。对于 CIFAR10,例如可以找到 here:

mean = [0.4914, 0.4822, 0.4465]
std = [0.2470, 0.2435, 0.2616]

使用这些值,您将能够将数据正确规范化为 mean=0std=1

我写了一个更笼统的长篇回答