PyTorch 中的迷你批次梯度下降和 DataLoader

Mini-batch gradient descent 是 gradient descent 算法的一个变种,常用于训练深度学习模型。该算法的思想是将训练数据分成若干个批次(batch),然后按顺序处理这些批次。在每次迭代中,我们同时更新属于特定批次的所有训练样本的权重。这个过程会随着不同批次而重复,直到所有训练数据都被处理完毕。与 batch gradient descent 相比,这种方法的优势在于,与一次性处理所有训练样本相比,它可以显著减少计算时间和内存使用。

DataLoader 是 PyTorch 中一个用于加载和预处理深度学习模型数据的模块。它可以用于从文件加载数据,或者生成合成数据。

在本教程中,我们将向您介绍 mini-batch gradient descent 的概念。您还将了解如何使用 PyTorch 的 DataLoader 来实现它。具体来说,我们将介绍:

  • 在 PyTorch 中实现 Mini-Batch Gradient Descent。
  • PyTorch 中 DataLoader 的概念以及如何用它加载数据。
  • Stochastic Gradient Descent 和 Mini-Batch Gradient Descent 之间的区别。
  • 如何使用 PyTorch DataLoader 实现 Stochastic Gradient Descent。
  • 如何使用 PyTorch DataLoader 实现 Mini-Batch Gradient Descent。

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


让我们开始吧。

PyTorch 中的 Mini-Batch Gradient Descent 和 DataLoader。
图片由 Yannis Papanastasopoulos 拍摄。保留部分权利。

概述

本教程共六部分,包括:

  • PyTorch 中的 DataLoader
  • 准备数据和线性回归模型
  • 构建数据集和 DataLoader 类
  • 使用 Stochastic Gradient Descent 和 DataLoader 进行训练
  • 使用 Mini-Batch Gradient Descent 和 DataLoader 进行训练
  • 绘制对比图表

PyTorch 中的 DataLoader

当您计划构建深度学习管道来训练模型时,一切都始于数据加载。数据越复杂,将其加载到管道中就越困难。PyTorch 的 DataLoader 是一个方便的工具,它提供了许多选项,不仅可以轻松加载数据,还可以应用数据增强策略,并迭代处理大型数据集中的样本。您可以从 torch.utils.data 中导入 DataLoader 类,如下所示。

DataLoader 类中有几个参数,我们只讨论 datasetbatch_sizedataset 是您在 DataLoader 类中找到的第一个参数,它将数据加载到管道中。第二个参数是 batch_size,它表示每次迭代处理的训练样本数量。

准备数据和线性回归模型

让我们重用上一教程中生成的线性回归数据。

与上一教程一样,我们初始化了一个变量 X,其值范围为 -5 到 5,并创建了一个斜率为 -5 的线性函数。然后,添加高斯噪声来创建变量 Y

我们可以使用 matplotlib 来绘制数据,以可视化模式。

回归模型的数据点

接下来,我们将基于简单的线性回归方程构建一个前向函数。我们将训练一个具有两个参数(w 和 b)的模型。因此,让我们定义一个函数用于模型的前向传播以及一个损失函数(MSE 损失)。参数变量 wb 将在函数外部定义。

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

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

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

构建数据集和 DataLoader 类

让我们构建我们的 DatasetDataLoader 类。Dataset 类允许我们构建自定义数据集并应用各种转换。而 DataLoader 类用于将数据集加载到管道中进行模型训练。它们创建如下。

使用 Stochastic Gradient Descent 和 DataLoader 进行训练

当 batch_size 设置为 1 时,训练算法被称为 **stochastic gradient descent**。同样,当 batch_size 大于 1 但小于整个训练数据大小时,训练算法被称为 **mini-batch gradient descent**。为了简单起见,让我们使用 stochastic gradient descent 和 DataLoader 进行训练。

和以前一样,我们将随机初始化可训练参数 $w$ 和 $b$,定义其他参数,如学习率或步长,创建一个空列表来存储损失,并设置训练的 epoch 数。

在 SGD 中,我们只需要在每次训练迭代中从数据集中选择一个样本。因此,一个简单的 for 循环加上前向和后向传播就足够了。

将所有内容放在一起,以下是训练模型(即 wb)的完整代码。

使用 Mini-Batch Gradient Descent 和 DataLoader 进行训练

进一步地,我们将使用 mini-batch gradient descent 和 DataLoader 来训练我们的模型。我们将为训练设置不同的 batch_size,即 batch_size 为 10 和 20。batch_size 为 10 的训练如下:

我们如何用 batch_size 为 20 来实现同样的功能:

将所有内容放在一起,完整代码如下:

绘制对比图表

最后,让我们可视化在训练过程中,三种算法(即 stochastic gradient descent、batch_size 为 10 的 mini-batch gradient descent 和 batch_size 为 20 的 mini-batch gradient descent)的损失如何下降。

从图中可以看出,mini-batch gradient descent 可以更快地收敛,因为我们可以通过在每一步计算平均损失来更精确地更新参数。

将所有内容放在一起,完整代码如下:

总结

在本教程中,您了解了 mini-batch gradient descent、DataLoader 以及它们在 PyTorch 中的实现。特别是,您学到了:

  • 在 PyTorch 中实现 mini-batch gradient descent。
  • PyTorch 中 DataLoader 的概念以及如何用它加载数据。
  • stochastic gradient descent 和 mini-batch gradient descent 之间的区别。
  • 如何使用 PyTorch DataLoader 实现 stochastic gradient descent。
  • 如何使用 PyTorch DataLoader 实现 mini-batch gradient descent。

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

Deep Learning with PyTorch

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

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

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

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

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


查看内容

暂无评论。

留下回复

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