在 PyTorch 中训练线性回归模型

线性回归是一种简单而强大的技术,用于根据其他变量预测变量的值。它通常用于建模两个或多个连续变量之间的关系,例如收入与年龄之间的关系,或体重与身高之间的关系。同样,线性回归可以用于预测连续结果,例如价格或数量需求,基于已知会影响这些结果的其他变量。

为了训练线性回归模型,我们需要定义一个成本函数和一个优化器。成本函数用于衡量我们的模型与数据的拟合程度,而优化器决定了朝哪个方向移动以改进这种拟合。

在之前的教程中,您学习了如何仅使用线性回归前向传播进行简单预测,而在这里,您将使用 PyTorch 训练线性回归模型并更新其学习参数。具体来说,您将学习:

  • 如何在 PyTorch 中从头构建一个简单的线性回归模型。
  • 如何将一个简单的线性回归模型应用于数据集。
  • 如何在一个可学习参数上训练一个简单的线性回归模型。
  • 如何在两个可学习参数上训练一个简单的线性回归模型。

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


那么,让我们开始吧。

在 PyTorch 中训练线性回归模型。
图片来源:Ryan Tasto。保留部分权利。

概述

本教程分为四个部分;它们是:

  • 准备数据
  • 构建模型和损失函数
  • 训练单个参数的模型
  • 训练两个参数的模型

准备数据

让我们导入本教程中将使用的一些库,并为我们的实验创建一些数据。

我们将使用合成数据来训练线性回归模型。我们将初始化一个变量 X,其值为 $-5$ 到 $5$,并创建一个斜率为 $-5$ 的线性函数。请注意,这个函数将在以后由我们训练的模型进行估计。

此外,我们将使用 matplotlib 在线图中查看数据。

线性函数图

为了模拟我们刚刚创建的真实数据,让我们添加一些高斯噪声来创建与 $X$ 大小相同的噪声数据,并将标准差的值保持在 0.4。这将通过使用 torch.randn(X.size()) 来完成。

现在,让我们使用下面的代码行可视化这些数据点。

数据点和线性函数

综合来看,以下是完整的代码。

构建模型和损失函数

我们创建了用于输入模型的数据,接下来我们将基于一个简单的线性回归方程构建一个前向函数。请注意,我们这里将构建模型以仅训练一个参数 ($w$)。稍后,在本教程的下一部分中,我们将添加偏差并训练模型以用于两个参数 ($w$ 和 $b$)。模型的前向传播函数定义如下:

在训练步骤中,我们需要一个标准来衡量原始数据点和预测数据点之间的损失。这些信息对于模型的梯度下降优化操作至关重要,并且在每次迭代后都会更新,以计算梯度并最小化损失。通常,线性回归用于连续数据,其中均方误差(MSE)有效地计算模型损失。因此,MSE 指标是我们此处使用的标准函数。

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

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

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

训练单个参数的模型

准备就绪后,我们就可以进行模型训练了。首先,参数 $w$ 需要随机初始化,例如,初始化为 $-10$。

接下来,我们将定义学习率或步长,一个空列表用于存储每次迭代后的损失,以及我们希望模型训练的迭代次数。步长设置为 0.1,我们每 epoch 训练模型 20 次迭代。

当执行以下代码行时,forward() 函数接受输入并生成预测。criterian() 函数计算损失并将其存储在 loss 变量中。根据模型损失,backward() 方法计算梯度,并且 w.data 存储更新后的参数。

模型训练的输出如下所示。如您所见,模型损失在每次迭代后都会减少,并且可训练参数(在本例中为 $w$)会更新。

我们还可以通过绘图来可视化损失如何减少。

训练损失 vs. 迭代次数

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

训练两个参数的模型

我们还在模型中添加偏差 $b$,并训练它以获得两个参数。首先,我们需要将前向函数更改为如下所示。

由于我们有两个参数 $w$ 和 $b$,我们需要将两者都初始化为一些随机值,如下所示。

虽然所有其他训练代码将保持不变,但我们只需对两个可学习参数进行一些更改。

保持学习率为 0.1,让我们训练我们的模型,使用两个参数进行 20 次迭代/epochs。

这是我们得到的输出。

同样,我们可以绘制损失历史。

损失图如下所示。

使用两个参数进行训练的损失历史

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

总结

在本教程中,您学习了如何在 PyTorch 中构建和训练一个简单的线性回归模型。具体来说,您学习了。

  • 如何在 PyTorch 中从头构建一个简单的线性回归模型。
  • 如何将一个简单的线性回归模型应用于数据集。
  • 如何在一个可学习参数上训练一个简单的线性回归模型。
  • 如何在两个可学习参数上训练一个简单的线性回归模型。

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

Deep Learning with PyTorch

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

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

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

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

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


查看内容

在 PyTorch 中训练线性回归模型 的 2 条回复

  1. Stephen 2022 年 12 月 14 日上午 8:57 #

    我喜欢看到这样的例子。我们常常直接使用最大最复杂的模型。线性回归对于许多问题来说都非常强大。更不用说线性回归是可解释的,而深度神经网络则不是。我认为对于大多数问题,我们可以先应用回归方法并评估学习和预测。

    • James Carmichael 2022 年 12 月 14 日上午 9:20 #

      感谢您的反馈和支持,Stephen!我们非常感谢!

发表回复

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