Training a Classifier
1. Loading and normalizing CIFAR10
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
在读到这儿的这句代码时,不太理解,查了些博客。
博客https://blog.csdn.net/u014484247/article/details/79997357中介绍transforms.ToTensor(),transforms.Normalize(mean,std)的作用。
ToTensor()将shape为(H, W, C)的nump.ndarray或img转为shape为(C, H, W)的tensor,其将每一个数值归一化到[0,1],其归一化方法比较简单,直接除以255即可。
transforms.Compose([transforms.ToTensor(),transforms.Normalize(std=(0.5,0.5,0.5),mean=(0.5,0.5,0.5))]),则其作用就是先将输入归一化到(0,1),再使用公式”(x-mean)/std”,将每个元素分布到(-1,1) 。
(1)transforms.Compose就是将transforms组合在一起;
(2)transforms.Normalize使用如下公式进行归一化:
x=(x-mean)/std(因为transforms.ToTensor()已经把数据处理成[0,1],那么(x-0.5)/0.5就是[-1.0, 1.0])
这样一来,数据中的每个值就变成了[-1,1]的数了。
我还找了一篇介绍np.transpose()函数的博客https://blog.csdn.net/qq_37377691/article/details/80086480。
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=2)
#经过这两步的处理,最终把数据集中的数据转成了trainloader中的(image,label)对的形式,后面对输入数据进行处理时,就从trainloader里面取。
testset=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)
testloader=torch.utils.data.DataLoader(testset,batch_size=4,shuffle=False,num_workers=2)
classes=('plane','car','bird','cat','deer','dog','frog','horse','ship','truck')