前面的教程中我们已经学习了如何定义神经网络,计算损失并更新网络的权重。接下来,我们完整的训练一个神经网络模型,并测试其性能。
一般来说,当在处理图像,文本,音频或视频数据时,可以使用标准的python
包将数据加载到一个numpy
数组中。然后将这个数组转换成torch.Tensor
。
Pillow
, OpenCV
。scipy
和librosa
。Python
或者Cython
以及NLTK
和SpaCy
都可以。
特别是对于图像,PyTorch
创建了一个名为torchvision
的软件包,该软件包具有常用数据集(如Imagenet
,CIFAR10
,MNIST
等)的数据加载器torchvision.datasets
,以及用于图像的数据转换器torch.utils.data.DataLoader
。这提供了巨大的便利并避免了编写样板代码。
本教程使用CIFAR10数据集。 我们要进行的分类的类别有:'airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'。 这个数据集中的图像都是3通道,32x32像素的图片。
我们要按顺序做这几个步骤:
torchvision
加载的数据集的输出是范围[0,1]的PILImage
图像。我们将它们转换为归一化范围[-1,1]的张量。
我们来从中找几张图片看看。
我们已经训练了两遍了。 此时需要测试一下到底结果如何。
通过对比神经网络给出的分类和已知的类别结果,可以得出正确与否。如果预测的正确,我们可以将样本加入正确预测的结果的列表中。
好的第一步,让我们展示几张照片来熟悉一下。
现在让我们看看神经网络认为这些例子是什么:
输出是10类对应的数值。一个类对应的数值越高,网络认为这个图像就是越接近这个类。那么,让我们得到最高数值对应的类:
结果看起来挺好。 看看神经网络在整个数据集上的表现结果如何:
从结果上看,神经网络输出的结果比随机要好,随机选择的话从十个中选择一个出来,准确率大概只有10%。 看上去神经网络学到了点东西。 我们看一下那么到底哪些类别表现良好又是哪些类别不太行呢?
Deep Learning with PyTorch: A 60 Minute Blitz(https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html)