Pytorch官网有非常优秀的教程,其中有几篇小短文属于名为DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ
比如现在你已经具备一定的基础(还没太了解的小伙伴加下方微信获取人工智能配套学习资料包先去学习),当你知道了如何定义神经网络了,能够同时计算loss值并且更新神经网络的权重值。现在想请你思考一下。
数据是什么?
通常情况下,当你不得不去处理图片、文本、音频和视频数据时,你能使用标准的python包将数据导入到numpy数组中。然后你能够将数组转化为pytorch的tensor类型。
(1)对于图片,有Pillow,OpenCV的包可以使用。
(2)对于音频,有scipy和librosa的包可以使用。
(3)对于文本,无论是基于原始Python或Cython的加载,使用NLTK和SpaCy都是可以使用的
特别的对于视觉的处理,我们已经创建一个包叫做torchvision,可以用于对公共数据集的数据加载程序,例如ImageNet, CIFAR10, MNIST等等。对于图片的数据转化工具包括torchvision.datasets和torch.utils.data.DataLoader。
这写工具为我们提供了很大的便利,避免了写过多的重复代码,便于相关人员的使用。
对于这篇教程,我们将会使用CIFIA10的数据集。它包含各个种类,比如‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’.。这些在CIFIA中的图片是3*32*32的大小的,3个(RGB)通道的32*32尺寸的图片。
介绍完毕,接下来进行实战训练。
训练一个图片分类器
我们将按照步骤进行如下的操作:
(1)使用torchvision导入并且规范化CIFIA10的训练数据和测试数据;
(2)定义一个卷积神经网络;
(3)定义一个损失(loss)函数;
(4)在训练数据集上训练一个神经网络;
(5)在测试集上测试网络的效果。
1.导入并且规范化CIFIA10的数据集
import torch
import torchvision
import torchvision.transforms as transforms
torchvision的数据集输出的范围是[0,1]。我们将他们转化为规范化的tensor格式范围区间是[-1,1]。
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
batch_size = 4
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
download=True, transform=transform)
testloa