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]],发布于 2021-10-28 07:56:35
torchvision.transforms.Normalize仅仅是一个移位的算子.给定参数mean ( "shift")和std ( "scale"),它将将输入映射到(input - shift) / scale。
由于您在所有三个通道上都使用mean=0.5和std=0.5,所以be (input - 0.5) / 0.5的结果只有在它的统计量实际上是mean=0.5和std=0.5 (当然不是这样)时才能使您的数据规范化。
考虑到这一点,您应该做的是提供实际数据集的统计信息。例如,对于CIFAR10,可以找到这里
mean = [0.4914, 0.4822, 0.4465]
std = [0.2470, 0.2435, 0.2616]有了这些值,您将能够正确地将数据规范化为mean=0和std=1。
我写了一个更一般的,长形式的答案,https://stackoverflow.com/questions/68874807/how-to-do-normalization-in-cnn/68876047#68876047。
https://stackoverflow.com/questions/69747119
复制相似问题