【问题标题】:What are the numbers in torch.transforms.normalize and how to select them?torch.transforms.normalize 中的数字是多少以及如何选择它们?
【发布时间】:2021-04-04 15:14:35
【问题描述】:

我是following some tutorials,我在transforms 部分中不断看到对我来说似乎很随意的不同数字

即,

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

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

transform = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

或其他人。

我想知道这些数字是从哪里出现的,以及如何知道选择正确的数字?

我将使用 MNIST 来保持理智,但很快就会使用我自己独特的数据集,并且可能需要我自己的规范化。

【问题讨论】:

    标签: python machine-learning deep-learning pytorch mnist


    【解决方案1】:

    在 pytorch 上下文中标准化从每个实例(在您的情况下为 MNIST 图像)减去平均值(第一个数字)并除以标准偏差(第二个数字)。这对每个通道分别进行,这意味着在 mnist 中您只需要 2 个数字,因为图像是灰度的,但是假设 cifar10 具有彩色图像,您将使用与上一个 sform 相同的东西(3 个数字表示平均值,3 个数字表示标准)。

    因此,基本上 MNIST 中的每个输入图像都会从 [0,255] 转换为 [0,1],因为您将图像转换为张量(来源:https://pytorch.org/docs/stable/torchvision/transforms.html -- 如果 PIL 图像属于,则将 [0, 255] 范围内的 PIL 图像或 numpy.ndarray (H x W x C) 转换为 [0.0, 1.0] 范围内形状 (C x H x W) 的 torch.FloatTensor到其中一种模式(L、LA、P、I、F、RGB、YCbCr、RGBA、CMYK、1)或者如果 numpy.ndarray 具有 dtype = np.uint8)

    之后,您希望输入图像的值在 [0,1] 或 [-1,1] 之类的范围内,以帮助您的模型收敛到正确的方向(发生缩放的原因有很多,例如 NN 更喜欢输入在该范围内避免梯度饱和)。现在,您可能注意到在 Normalize 中传递 0.5 和 0.5 会产生范围内的值:

    输入图像的最小值 = 0 -> 0-0.5 = -0.5 -> 除以 0.5 std -> -1

    输入图像的最大值 = 255 -> toTensor -> 1 -> (1 - 0.5) / 0.5 -> 1

    因此它会在 [-1, 1] 范围内转换您的数据

    【讨论】:

    • 谢谢 :) 这仍然不能解释其他“神奇”数字。例如((0.1307,), (0.3081,)) 是什么?
    • 对不起。这里解释说它是 MNIST 数据集(训练)discuss.pytorch.org/t/normalization-in-the-mnist-example/457 的平均值和标准——所以当你想将数据缩放到 0 平均值和 1 标准时,你必须自己计算它,但在 MNIST 中已经完成
    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多