gpt4 book ai didi

python - 对 MNIST 数据集进行标准化和缩放的正确方法

转载 作者:行者123 更新时间:2023-12-04 12:08:04 51 4
gpt4 key购买 nike

我到处找,但找不到我想要的。基本上,MNIST 数据集具有像素值在范围 [0, 255] 内的图像。 .人们说,一般来说,最好做到以下几点:

  • 将数据缩放到 [0,1]范围。
  • 将数据标准化为具有零均值和单位标准差 (data - mean) / std .

  • 不幸的是,没有人展示过如何做这两件事。它们都减去 0.1307 的平均值并除以标准差 0.3081 .这些值基本上是数据集的均值和标准差除以 255:
    from torchvision.datasets import MNIST        
    import torchvision.transforms as transforms

    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True)
    print('Min Pixel Value: {} \nMax Pixel Value: {}'.format(trainset.data.min(), trainset.data.max()))
    print('Mean Pixel Value {} \nPixel Values Std: {}'.format(trainset.data.float().mean(), trainset.data.float().std()))
    print('Scaled Mean Pixel Value {} \nScaled Pixel Values Std: {}'.format(trainset.data.float().mean() / 255, trainset.data.float().std() / 255))
    这输出以下
    Min Pixel Value: 0 
    Max Pixel Value: 255
    Mean Pixel Value 33.31002426147461
    Pixel Values Std: 78.56748962402344
    Scaled Mean: 0.13062754273414612
    Scaled Std: 0.30810779333114624
    然而,显然这没有上述任何一项!结果数据 1) 不会介于 [0, 1] 之间并且不会有意思 0或标准 1 .事实上,这就是我们正在做的: [data - (mean / 255)] / (std / 255)这是 非常与此不同 [(scaled_data) - (mean/255)] / (std/255)哪里 scaled_data只是 data / 255 .

    最佳答案

    我认为您误解了一个关键概念:这是两种不同且不一致的扩展操作。您只能拥有以下两者之一:

  • 均值 = 0,标准差 = 1
  • 数据范围 [0,1]

  • 想想看,考虑 [0,1] 范围:如果数据都是小的正值,min=0 和 max=1,那么数据的总和必须是正的,给出一个正的非零均值。同样,stdev 不能是 1当没有任何数据可能与平均值相差 1.0 时。
    相反,如果您的均值 = 0,则某些数据必须为负。

    您只使用两种转换中的一种。您使用哪一种取决于您的数据集的特征,以及——最终——哪一种更适合您的模型。
    对于 [0,1] 缩放,您只需除以 255。
    对于 mean=0, stdev=1 缩放,您执行您已经知道的简单线性变换:
    new_val = (old_val - old_mean) / old_stdev
    这是否为您澄清,还是我完全错过了您的困惑点?

    关于python - 对 MNIST 数据集进行标准化和缩放的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746182/

    51 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com