步骤如下:
1.使用torchvision加载并预处理CIFAR-10数据集、
2.定义网络
3.定义损失函数和优化器
4.训练网络并更新网络参数
5.测试网络
运行环境:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
windows + python3. 6.3 + pycharm + pytorch0. 3.0 import torchvision as tv import torchvision.transforms as transforms import torch as t from torchvision.transforms import ToPILImage show = ToPILImage() #把Tensor转成Image,方便可视化 import matplotlib.pyplot as plt import torchvision import numpy as np ###############数据加载与预处理 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 = '/python projects/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 = '/python projects/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]] for j in range(4))) # show(tv.utils.make_grid(images+1)/2).resize((400,100)) def imshow(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() #关掉图片才能往后继续算 #########################定义网络 import torch.nn as nn import torch.nn.functional as F class Net(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 ) def forward( 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) return x net = Net() print (net) #############定义损失函数和优化器 from torch import optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(),lr = 0.01 ,momentum = 0.9 ) ##############训练网络 from torch.autograd import Variable import time start_time = time.time() for epoch in range ( 2 ): running_loss = 0.0 for i,data in enumerate (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 ] if i % 2000 = = 1999 : print ( '[%d,%5d] loss:%.3f' % (epoch + 1 , i + 1 , running_loss / 2000 )) running_loss = 0.0 print ( 'finished training' ) end_time = time.time() print ( "Spend time:" , end_time - start_time) |
以上这篇利用pytorch实现对CIFAR-10数据集的分类就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/summer2day/article/details/79154731