首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火炬cifar10图像未标准化

火炬cifar10图像未标准化
EN

Stack Overflow用户
提问于 2021-10-28 01:04:18
回答 1查看 876关注 0票数 0
代码语言:javascript
复制
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]

我正在使用上述代码,并期望数据将标准化。但事实并非如此,下面是结果。我需要使用数据方法访问数据来进行更多的处理。产出低于。

代码语言:javascript
复制
array([[[ 59,  62,  63],
        [ 43,  46,  45],
        [ 50,  48,  43],
        ...,
        [158, 132, 108],
        [152, 125, 102],
        [148, 124, 103]],
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-28 07:56:35

torchvision.transforms.Normalize仅仅是一个移位的算子.给定参数mean ( "shift")和std ( "scale"),它将将输入映射到(input - shift) / scale

由于您在所有三个通道上都使用mean=0.5std=0.5,所以be (input - 0.5) / 0.5的结果只有在它的统计量实际上是mean=0.5std=0.5 (当然不是这样)时才能使您的数据规范化。

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

代码语言:javascript
复制
mean = [0.4914, 0.4822, 0.4465]
std = [0.2470, 0.2435, 0.2616]

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

我写了一个更一般的,长形式的答案,https://stackoverflow.com/questions/68874807/how-to-do-normalization-in-cnn/68876047#68876047

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69747119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档