必须处理图像,文本,音频或视频数据时,可以使用将数据加载到 NumPy 数组中的标准 Python 包。 然后,可以将该数组转换为torch.*Tensor 。
专门针对视觉,创建了一个名为torchvision 的包,其中包含用于常见数据集(例如 Imagenet,CIFAR10,MNIST 等)的数据加载器,以及用于图像(即torchvision.datasets 和torch.utils.data.DataLoader )的数据转换器。
以下使用 CIFAR10 数据集。 它具有以下类别:“飞机”,“汽车”,“鸟”,“猫”,“鹿”,“狗”,“青蛙”,“马”,“船”,“卡车”。 CIFAR-10 中的图像尺寸为3x32x32 ,即尺寸为32x32 像素的 3 通道彩色图像。
? ? ? ? ?
?训练图像分类器的步骤:
1.使用torchvision 加载并标准化 CIFAR10 训练和测试数据集
2.定义卷积神经网络
3.定义损失函数
4.训练网络
5.测试网络
过程:
1.加载数据
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,#kaggle里面有的数据集,直接加载就可以
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
#通过影响数据加载速度,从而影响训练速度,代表CPU数量,GPU每次训练完都可以直接从CPU中取到next batch的数据
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
展示一些训练图像
import matplotlib.pyplot as plt
import numpy as np
def imshow(img):
'''
img 格式: channels,imageSize,imageSize
imshow需要格式:imageSize,imageSize,channels
np.transpose 转换数组
'''
img = img / 2 + 0.5 # 反归一化。因为归一话的时候是先减去平均值0.5 ,然后再除以标准偏差0.5
#那么反归一化就是先乘以0.5,再加0.5。
npimg = img.numpy()#将torch.FloatTensor 转换为numpy
plt.imshow(np.transpose(npimg, (1, 2, 0)))#调整图片格式,将npimg的数据格式由(channels,imagesize,imagesize)转化为(imagesize,imagesize,channels),进行格式的转换后方可进行显示。
plt.show()
# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()
# show images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))
?
|