这篇文章将为大家详细讲解有关使用PyTorch怎么训练一个图像分类器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<>强如下所示:强>
import 火炬 import torchvision import torchvision.transforms  as 转换 import matplotlib.pyplot  as plt import numpy  as np print(“火炬:% s", %, torch.__version__) print (“tortorchvisionch: % s", %, torchvision.__version__) print (“numpy: % s", %, np.__version__)
:
火炬:1.0.0 tortorchvisionch: 0.2.1 numpy: 1.15.4
<强>数据从哪儿来? 强>
通常来说,你可以通过一些python包来把图像,文本,音频和视频数据加载为numpy数组。然后将其转换为火炬。*张量。
图像.Pillow, OpenCV是用得比较多的
音频.scipy和librosa
文本。纯python或者Cython就可以完成数据加载,可以在NLTK和宽大的找到数据
对于计算机视觉而言,我们有torchvision包,它可以用来加载一下常用数据集如Imagenet, CIFAR10,财政部等等,也有一些常用的为图像准备数据转换例如torchvision.datasets和torch.utils.data.DataLoader。
这次的教程中,我们使用CIFAR10数据集,他有“飞机# 39;,”汽车# 39;,“鸟# 39;,”猫# 39;,“鹿# 39;,”狗# 39;,“青蛙# 39;,”马# 39;,“船# 39;,”卡车# 39;这几个类别的图像。图像大小都是3 x32x32的。也就是说,图像都是三通道的,每一张图的尺寸都是32 x32。
<>强训练一个图像分类器强>
步骤如下:
使用torchvision加载,归一化训练集和测试集
定义卷积神经网络
定义损失函数
使用训练集训练网络
使用测试集测试网络
<强> 1。加载,归一化CIFAR10 强>
我们可以使用torchvision很轻松的完成
torchvision的数据集是基于PILImage的,数值是[0,1],我们需要将其转成范围为(1,- 1)的张量
transform =, transforms.Compose ([ transforms.ToTensor才能(), transforms.Normalize才能((0.5,0.5,0.5),,(0.5,0.5,0.5)) ]) 时间=trainset torchvision.datasets.CIFAR10 (root=& # 39;。/数据# 39;,,火车=True,, ,,,,,,,,,,,,,,,,,,,下载=True,变换=变换) 时间=trainloader torch.utils.data.DataLoader(小火车,batch_size=4,, ,,,,,,,,,,,,,,,,,,,,洗牌=True, num_workers=4) 时间=testset torchvision.datasets.CIFAR10 (root=& # 39;。/数据# 39;,,火车=False,, ,,,,,,,,,,,,,,,,,,,下载=True,变换=变换) 时间=testloader torch.utils.data.DataLoader (testset, batch_size=4,, ,,,,,,,,,,,,,,,,,,,,洗牌=True, num_workers=4) classes =,(& # 39;平面# 39;,,& # 39;车# 39;,,& # 39;鸟# 39;,,& # 39;猫# 39;,, ,,,,,& # 39;鹿# 39;,,& # 39;狗# 39;,,& # 39;青蛙# 39;,,& # 39;马# 39;,,& # 39;船# 39;,,& # 39;卡车# 39;)
:
Downloading https://www.cs.toronto.edu/kriz/cifar-10-python.tar.gz 用。/数据/cifar-10-python.tar.gz Files already  downloaded 以及验证
让我们来看看训练集的图片
#,显示一张图片 def imshow (img): 时间=img 才能;img /, 2, +, 0.5,,, #,逆归一化 时间=npimg 才能;img.numpy () plt.imshow才能(np.transpose (npimg, (1,, 2,, 0))) plt.show才能() #,任意地拿到一些图片 时间=dataiter iter(装载量) 图片,,labels =, dataiter.next () #,显示图片 imshow (torchvision.utils.make_grid(图片) #,显示类标 打印(& # 39;,& # 39;. join(& # 39; % 5 & # 39;, %,类[标签[j]], for j 拷贝范围(4)))
:
truck , dog ship ,狗
<强> 2。定义卷积神经网络强>
可以直接复制神经网络的代码,修改里面的几层即可。
import torch.nn as 神经网络 import torch.nn.functional  as F class 净(nn.Module): def 才能__init__(自我): ,,,超级(净,,自我). __init__ () ,,,self.conv1 =, nn.Conv2d(3, 6日,5) ,,,self.pool =, nn.MaxPool2d (2, 2) ,,,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 才能向前(自我,,x): ,,,x =, self.pool (F.relu (self.conv1 (x))) ,,,x =, self.pool (F.relu (self.conv2 (x))) null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用PyTorch怎么训练一个图像分类器