PyTorch 教程-图像识别中的图像转换
在PyTorch中进行图像识别,加载和转换是两个基本的概念,是识别过程的起始步骤。
以下是逐步执行加载和转换的步骤:
步骤1:
import torchimport matplotlib.pyplot as pltimport numpy as npfrom torchvision import datasets, transforms
步骤2:
training_dataset=datasets.MNIST(root='./data')
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资料合集
transform1=transforms.Compose([transforms.ToTensor()])
transform1=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,),(0.5,))])
training_dataset
步骤3:
def im_convert(tensor):
image=tensor.clone().detach().numpy()
注意:将转换为numpy数组的张量具有第一、第二和第三维的形状。第一维代表颜色通道,第二和第三维代表图像的宽度和高度以及像素。
我们知道MNIST数据集中的每个图像都是一个对应于单个颜色通道的灰度图像,宽度和高度为28*28像素。因此,形状将为(1,28,28)。
步骤4:
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)))
image=image.clip(0,1)return image
步骤6:
training_loader=torch.utils.data.DataLoader(dataset=training_dataset,batch_size=100,shuffle=True)
第一个参数是数据集,等于我们的training_dataset。第二个参数是我们的批量大小,等于100。第三个参数,我们将shuffle设置为true。
注意:批量大小为100将花费600次迭代才能完成一个epoch,并且每次迭代都会更新神经网络的权重并最小化错误。
步骤7:
dataiter=iter(training_loader)images,labels=dataiter.next()
步骤8:
fig=plt.figure(figsize=(25,4))
ax=fig.add_subplot(2,10,idx+1)
plt.imshow(im_convert(images[idx]))ax.set_title([labels[idx].item()])
最后调用plt.show(),它将为我们提供预期的结果。
完整代码
import torchimport matplotlib.pyplot as pltimport numpy as npfrom torchvision import datasets,transformstransform1=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 imagedataiter=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()
热门推荐