在PyTorch中进行图像识别,加载和转换是两个基本的概念,是识别过程的起始步骤。

以下是逐步执行加载和转换的步骤:

步骤1:

在第一步中,我们安装所有必需的库,如pip、torchvision、numpy等。如果已经满足所有必需的库,则导入torch,然后从torchvision导入datasets和transforms。为了绘制我们的数据集,我们将导入matplotlib.pyplot库,还将导入numpy执行操作。导入库如下:

import torch  
import matplotlib.pyplot as plt  
import numpy as np  
from torchvision import datasets, transforms 

步骤2:

在第二步中,我们使用datasets的MNIST()方法加载MNIST数据集。在第一个参数中,我们指定了数据的根目录,如下所示:

training_dataset=datasets.MNIST(root='./data')   

在第二个参数中,我们设置train='true'。我们这样做是为了初始化MNIST训练数据集。之后,我们设置download='true',如果数据文件夹中没有数据文件,它将下载到数据文件夹中。

Training_dataset=datasets.MNIST(root='./data',train=True,download=True)    

最后一个参数将是transform,它等于在training_dataset之前初始化的transform1参数。此参数规定了您希望在图像上应用的任何图像操作。

training_dataset=datasets.MNIST(root='./data',train=True,download=True,transform=transform1)  

注意:我们的MNIST图像是28*28的灰度图像,这意味着每个图像都是一个28像素宽和28像素长的二维数字数组,每个像素的强度范围从0到255。

我们必须将图像从数组转换为张量。我们将使用transforms的Compose()方法,它允许我们将多个转换链接在一起。因此,我们的第一个转换,作为组合的第一个参数传递,将是transforms.ToTensor()。这将将我们的0到255范围内的numpy数组转换为0到1范围内的浮点张量。

transform1=transforms.Compose([transforms.ToTensor()])  

我们还将使用transforms的normalize()方法应用标准化转换。

transform1=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,),(0.5,))])  

在normalize()方法中,我们指定用于规范化张量图像的均值,并指定中心偏差。现在,我们调用我们的训练数据集:

training_dataset  

3-1.png

步骤3:

我们将通过绘制来进一步分析此数据集中的图像。为了绘制张量图像,我们必须将其转换回numpy数组。我们将在一个包含一个参数的函数def im_convert()中执行此操作,该参数将是我们的张量图像。

def im_convert(tensor):  

在将张量转换为numpy数组之前,我们首先将其克隆。它将创建张量的新副本,然后我们使用detach()函数,然后使用numpy:

image=tensor.clone().detach().numpy()  

注意:将转换为numpy数组的张量具有第一、第二和第三维的形状。第一维代表颜色通道,第二和第三维代表图像的宽度和高度以及像素。

我们知道MNIST数据集中的每个图像都是一个对应于单个颜色通道的灰度图像,宽度和高度为28*28像素。因此,形状将为(1,28,28)。

步骤4:

为了绘制我们的图像,要求图像具有形状(28,28,1)。因此,我们将通过交换轴0、1和2来转置我们的图像:

image=image.transpose(1,2,0)    

此方法交换轴0与轴1,轴1与轴2。

步骤5:

在接下来的步骤中,我们对我们之前进行过规范化的图像进行反规范化。规范化是通过减去均值并除以标准差完成的。我们将通过标准差乘以均值,然后加上均值来进行反规范化:

image=image*(np.array((0.5,0.5,0.5))+np.array((0.5,0.5,0.5)))   

为了确保在0到1之间的范围,我们使用clip()函数,并将零和一作为参数传递。我们将clip函数应用于最小值为0和最大值为1,并返回图像:

image=image.clip(0,1)  
return image  

步骤6:

现在,我们为更好的可视化绘制我们的MNIST数据集。我们将从training_loader()加载图像开始。training loader是我们在训练神经网络时之前用于指定训练批次的。对于每个epoch,我们执行整个数据集的单次传递。但是,具有六万张训练图像的一个epoch对于一次性适应计算机来说太大了。因此,我们将其划分为较小的批次,使用我们的train loader:

training_loader=torch.utils.data.DataLoader(dataset=training_dataset,batch_size=100,shuffle=True)   

第一个参数是数据集,等于我们的training_dataset。第二个参数是我们的批量大小,等于100。第三个参数,我们将shuffle设置为true。

注意:批量大小为100将花费600次迭代才能完成一个epoch,并且每次迭代都会更新神经网络的权重并最小化错误。

步骤7:

在下一步中,我们包装我们的train loader。它将创建一个对象,允许我们一次遍历可变的训练 loader 中的一个元素。我们通过在dataiter上调用next来一次访问它的一个元素。next()函数将获取我们训练数据的第一个批次,该训练数据将分为图像和标签:

dataiter=iter(training_loader)  
images,labels=dataiter.next()  

步骤8:

现在,我们将绘制批次中的图像以及它们对应的标签。这将通过plt的figure函数以及将figsize设置为整数元组25*4来完成,该元组将指定图的宽度和高度:

fig=plt.figure(figsize=(25,4))  

现在,我们绘制来自我们批次的20个MNIST图像。我们使用add_subplot()方法向当前图添加一个子图,并传递2、10和idx作为函数的参数。这里两是行数,十是列数,idx是索引。

ax=fig.add_subplot(2,10,idx+1)  

现在,我们将显示我们的图像,使用im_show()函数,并为每个图像绘制一个标题:

plt.imshow(im_convert(images[idx]))   
ax.set_title([labels[idx].item()])  

最后调用plt.show(),它将为我们提供预期的结果。

完整代码

import torch  
import matplotlib.pyplot as plt  
import numpy as np  
from torchvision import datasets,transforms   
transform1=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,),(0.5,))])  
training_dataset=datasets.MNIST(root='./data',train=True,download=True,transform=transform1)  
training_loader=torch.utils.data.DataLoader(dataset=training_dataset,batch_size=100,shuffle=True)  
def im_convert(tensor):  
    image=tensor.clone().detach().numpy()  
    image=image.transpose(1,2,0)  
    print(image.shape)  
    image=image*(np.array((0.5,0.5,0.5))+np.array((0.5,0.5,0.5)))  
    image=image.clip(0,1)  
    return image  
dataiter=iter(training_loader)  
images,labels=dataiter.next()  
fig=plt.figure(figsize=(25,4))  
for idx in np.arange(20):  
    ax=fig.add_subplot(2,10,idx+1)  
    plt.imshow(im_convert(images[idx]))  
    ax.set_title([labels[idx].item()])  
plt.show()  

3-2.png

3-3.png

现在,借助这些标签图像,我们将实现一个神经网络,用于对新的测试图像进行分类。

标签: Pytorch, Pytorch教程, Pytorch安装, Pytorch入门, Pytorch下载, Pytorch指南, Pytorch编程, Pytorch入门教程, Pytorch初级教程, Pytorch进阶, Pytorch高级教程, Pytorch学习, Pytorch库