D2L 8.线性回归的简洁实现
Author:baiyucraft
BLog: baiyucraft’s Home
原文:《动手学深度学习》
线性神经网络:
在上一篇文章中,我们只依赖了(1)通过张量来进行数据存储和线性代数;(2)通过自动微分来计算梯度;这两样最基本的运算来实现线性回归模型。实际上,我们能用框架来很方便的实现线性回归的操作。
1.生成数据集
这一步和之前一样:
1 |
|
2.读取数据集
我们可以调用框架中现有的API来读取数据。我们将 features
和 labels
作为API的参数传递,并在实例化数据迭代器对象时指定 batch_size
。此外,布尔值 is_train
表示是否希望数据迭代器对象在每个迭代周期内打乱数据
1 |
|
3.定义模型并初始化模型参数
对于标准操作,我们可以使用框架的预定义好的层。这使我们只需关注使用哪些层来构造模型,而不必关注层的实现细节。我们首先定义一个模型变量net
,它是一个 Sequential
类的实例。 Sequential
类为串联在一起的多个层定义了一个容器。当给定输入数据, Sequential
实例将数据传入到第一层,然后将第一层的输出作为第二层的输入,依此类推。在下面的例子中,我们的模型只包含一个层,因此实际上不需要Sequential
。但是由于以后几乎所有的模型都是多层的,在这里使用Sequential
会让你熟悉标准的流水线。
1 |
|
4.定义损失函数
计算均方误差使用的是MSELoss
类:
1 |
|
5.定义优化算法
小批量随机梯度下降算法是一种优化神经网络的标准工具,PyTorch 在 optim
模块中实现了该算法的许多变种。当我们实例化 SGD
实例时,我们要指定优化的参数(可通过 net.parameters()
从我们的模型中获得)以及优化算法所需的超参数字典。小批量随机梯度下降只需要设置 lr
值,这里设置为 0.03。
1 |
|
6.训练
每个迭代周期中训练步骤如下:
- 通过调用
net(X)
生成预测并计算损失l
(正向传播)。 - 通过进行反向传播来计算梯度。
- 通过调用优化器来更新模型参数。
1 |
|
运行结果: