使用PyTorch怎么训练一个图像分类器

  介绍

这篇文章将为大家详细讲解有关使用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。

使用PyTorch怎么训练一个图像分类器

<>强训练一个图像分类器

步骤如下:

使用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)))

:

使用PyTorch怎么训练一个图像分类器

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怎么训练一个图像分类器