步骤如下:
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