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