在 PyTorch 中为图像构建 Softmax 分类器

Softmax 分类器是一种监督学习中的分类器。它是深度学习网络中的一个重要组成部分,也是深度学习从业者中最受欢迎的选择。

Softmax 分类器适用于多类别分类,它输出每个类别的概率。

本教程将教您如何为图像数据构建 Softmax 分类器。您将学习如何准备数据集,然后学习如何使用 PyTorch 实现 Softmax 分类器。具体来说,您将学习:

  • 关于 Fashion-MNIST 数据集。
  • 如何在 PyTorch 中将 Softmax 分类器用于图像。
  • 如何在 PyTorch 中构建和训练多类别图像分类器。
  • 如何绘制模型训练后的结果。

通过我的《用PyTorch进行深度学习》一书来启动你的项目。它提供了包含可用代码自学教程


让我们开始吧。

使用 PyTorch 为图像构建 Softmax 分类器。
图片来源:Joshua J. Cotten。部分权利保留。

概述

本教程分为三个部分;它们是

    • 准备数据集
    • 构建模型
    • 训练模型

准备数据集

这里将使用 Fashion-MNIST 数据集。这是一个预处理过的、组织良好的数据集,包含 70,000 张图像,其中 60,000 张用于训练数据,10,000 张用于测试数据。

数据集中的每个样本都是一张 $28 \times 28$ 像素的灰度图像,总像素数为 784。该数据集有 10 个类别,每个图像都标记为一种时尚单品,并关联一个从 0 到 9 的整数标签。

该数据集可以从 torchvision 加载。为了加快训练速度,我们将数据集限制为 4000 个样本。

首次获取 fashion-MNIST 数据集时,您会看到 PyTorch 从互联网下载它并将其保存到名为 data 的本地目录。

上面的 train_data 是一个元组列表,每个元组包含一个图像(PIL 图像对象格式)和一个整数标签。

让我们用 matplotlib 绘制数据集中前 10 张图像。

您应该会看到类似以下的图像

PyTorch 需要 PyTorch 张量格式的数据。因此,您需要通过应用转换来转换这些数据,使用 PyTorch 转换中的 ToTensor() 方法。此转换可以通过 torchvision 的数据集 API 透明地完成。

在进行模型构建之前,我们还将数据分为训练集和验证集,其中前 3500 张图像为训练集,其余为验证集。通常我们会先对数据进行洗牌,但为了代码简洁,我们可以跳过这一步。

想开始使用PyTorch进行深度学习吗?

立即参加我的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

构建模型

为了构建自定义的 Softmax 模块进行图像分类,我们将使用 PyTorch 库中的 nn.Module。为了保持简单,我们构建一个只有一层的模型。

现在,我们实例化模型对象。它接收一个一维向量作为输入,并预测 10 个不同的类别。我们还可以检查参数是如何初始化的。

您应该会看到模型的权重是随机初始化的,但其形状应该如下所示:

训练模型

我们将使用随机梯度下降进行模型训练,并配合交叉熵损失。我们将学习率固定为 0.01。为了方便训练,我们还将数据加载到数据加载器中,用于训练集和验证集,并将批次大小设置为 16。

现在,让我们将所有内容整合起来,训练我们的模型 200 个 epoch。

您应该会看到进度每 10 个 epoch 打印一次。

如您所见,模型准确率在每个 epoch 后都会增加,损失会减少。这里,您为 Softmax 图像分类器达到的准确率约为 85%。如果您使用更多数据并增加 epoch 数量,准确率可能会提高很多。现在让我们看看损失和准确率的图表。

首先是损失图

应该看起来像这样:

这是模型准确率图

如下所示:

把所有东西放在一起,下面是完整的代码。

总结

在本教程中,您学习了如何为图像数据构建 Softmax 分类器。具体来说,您学习了:

  • 关于 Fashion-MNIST 数据集。
  • 如何在 PyTorch 中将 Softmax 分类器用于图像。
  • 如何在 PyTorch 中构建和训练多类别图像分类器。
  • 如何绘制模型训练后的结果。

开始使用PyTorch进行深度学习!

Deep Learning with PyTorch

学习如何构建深度学习模型

...使用新发布的PyTorch 2.0库

在我的新电子书中探索如何实现
使用 PyTorch进行深度学习

它提供了包含数百个可用代码自学教程,让你从新手变成专家。它将使你掌握:
张量操作训练评估超参数优化等等...

通过动手练习开启你的深度学习之旅


查看内容

4 条对 在 PyTorch 中为图像构建 Softmax 分类器 的回复

  1. Dhavan Rathore 2023年1月9日 下午8:41 #

    写得很好,解释得很清楚

  2. Dhavan Rathore 2023年1月9日 下午8:42 #

    是的,说得好

  3. Andrew 2023年10月27日 上午2:41 #

    我有点困惑:如果我没记错的话,这不是一个 Softmax 分类器,它是一个用 BCE 损失训练的 SVM。这里没有 Softmax 层,也就是说,没有实际的归一化来使线性层的输出成为概率分布。但也许我错了,也许 Softmax 层不是必须的。有人知道吗?

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。