利用pytorch实现对CIFAR-10数据集的分类
步骤如下:
1.使用torchvision加载并预处理CIFAR-10数据集、
2.定义网络
3.定义损失函数和优化器
4.训练网络并更新网络参数
5.测试网络
运行环境:
windows+python3.6.3+pycharm+pytorch0.3.0 importtorchvisionastv importtorchvision.transformsastransforms importtorchast fromtorchvision.transformsimportToPILImage show=ToPILImage()#把Tensor转成Image,方便可视化 importmatplotlib.pyplotasplt importtorchvision importnumpyasnp ###############数据加载与预处理 transform=transforms.Compose([transforms.ToTensor(),#转为tensor transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),#归一化 ]) #训练集 trainset=tv.datasets.CIFAR10(root='/pythonprojects/test/data/', train=True, download=True, transform=transform) trainloader=t.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=0) #测试集 testset=tv.datasets.CIFAR10(root='/pythonprojects/test/data/', train=False, download=True, transform=transform) testloader=t.utils.data.DataLoader(testset, batch_size=4, shuffle=True, num_workers=0) classes=('plane','car','bird','cat','deer','dog','frog','horse','ship','truck') (data,label)=trainset[100] print(classes[label]) show((data+1)/2).resize((100,100)) #dataiter=iter(trainloader) #images,labels=dataiter.next() #print(''.join('11%s'%classes[labels[j]]forjinrange(4))) #show(tv.utils.make_grid(images+1)/2).resize((400,100)) defimshow(img): img=img/2+0.5 npimg=img.numpy() plt.imshow(np.transpose(npimg,(1,2,0))) dataiter=iter(trainloader) images,labels=dataiter.next() print(images.size()) imshow(torchvision.utils.make_grid(images)) plt.show()#关掉图片才能往后继续算 #########################定义网络 importtorch.nnasnn importtorch.nn.functionalasF classNet(nn.Module): def__init__(self): super(Net,self).__init__() self.conv1=nn.Conv2d(3,6,5) self.conv2=nn.Conv2d(6,16,5) self.fc1=nn.Linear(16*5*5,120) self.fc2=nn.Linear(120,84) self.fc3=nn.Linear(84,10) defforward(self,x): x=F.max_pool2d(F.relu(self.conv1(x)),2) x=F.max_pool2d(F.relu(self.conv2(x)),2) x=x.view(-1,16*5*5) x=F.relu(self.fc1(x)) x=F.relu(self.fc2(x)) x=self.fc3(x) returnx net=Net() print(net) #############定义损失函数和优化器 fromtorchimportoptim criterion=nn.CrossEntropyLoss() optimizer=optim.SGD(net.parameters(),lr=0.01,momentum=0.9) ##############训练网络 fromtorch.autogradimportVariable importtime start_time=time.time() forepochinrange(2): running_loss=0.0 fori,datainenumerate(trainloader,0): #输入数据 inputs,labels=data inputs,labels=Variable(inputs),Variable(labels) #梯度清零 optimizer.zero_grad() outputs=net(inputs) loss=criterion(outputs,labels) loss.backward() #更新参数 optimizer.step() #打印log running_loss+=loss.data[0] ifi%2000==1999: print('[%d,%5d]loss:%.3f'%(epoch+1,i+1,running_loss/2000)) running_loss=0.0 print('finishedtraining') end_time=time.time() print("Spendtime:",end_time-start_time)
以上这篇利用pytorch实现对CIFAR-10数据集的分类就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。