首页 > 行业资讯 > PyTorch 教程-图像识别中的图像转换

PyTorch 教程-图像识别中的图像转换

时间:2024-01-24 来源: 浏览:

PyTorch 教程-图像识别中的图像转换

点击关注 Python架构师
Python架构师

gh_1d7504e4dee1

回复:python,领取Python面试题。分享Python教程,Python架构师教程,Python爬虫,Python编程视频,Python脚本,Pycharm教程,Python微服务架构,Python分布式架构,Pycharm注册码。

整理: python架构师

在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。

资源分享

点击领取:最全Python资料合集
我们必须将图像从数组转换为张量。我们将使用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:

我们将通过绘制来进一步分析此数据集中的图像。为了绘制张量图像,我们必须将其转换回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()

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

 
热门推荐
  • 为什么互联网公司的人喜欢叫人“同学”
  • 2024最新9款红包封面!免费领!
  • PyTorch 教程-在PyTorch中的图像识别MNIST数据集

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐