动手学深度学习4 | 线性回归的实现

109 阅读2分钟

线性回归的基本实现

1.定义模型和初始化数据
2.定义损失函数和算法优化
3.训练,与人造数据集比对

导入模块

截屏2023-10-14 20.45.03.png

构造人造数据集

这一步相当于将数学题标答写出来作为对照

截屏2023-10-14 20.46.33.png

  • 打印绘制人造数据集 截屏2023-10-14 20.48.03.png

设定mini_bash

这一步是生成大小为batch_size的小批量mini_batch,作为样本,打乱顺序,每次取出小批量,以便后续计算损失

截屏2023-10-14 20.51.17.png

定义初始化模型参数

截屏2023-10-14 20.53.10.png

定义损失函数

截屏2023-10-14 20.53.34.png

定义优化算法

截屏2023-10-14 20.53.54.png

训练

截屏2023-10-14 20.55.46.png

比较训练结果

截屏2023-10-14 21.04.03.png

简洁实现

使用深度学习框架简洁实现

导入和创建人造数据集

无需定义x和y的关系,直接使用函数

截屏2023-10-14 21.08.09.png

创建mini_bash

截屏2023-10-14 21.19.30.png

python中,不定长形参用*args表示,表示这个参数是一个可以传入列表或元组的不定长形参;字典式不定长形参用**kwargs表示,表示这个参数是一个必须传入字典类型数据的不定长形参;

搭建模型和参数初始化

截屏2023-10-16 16.52.40.png

nn.Sequential():一个序列容器,用于搭建神经网络的模块被按照被传入构造器的顺序添加到nn.Sequential()容器中。Sequential中文译为,顺序的,序列的
nn.Linear():用于创建线性层的类。线性层也被称为全连接层,它将输入与权重矩阵相乘并加上偏置,然后通过激活函数进行非线性变换。

参数初始化又称为权重初始化。对模型权重的初始化很重要 如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。

如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。

而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,这就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。

损失函数和优化算法

截屏2023-10-20 10.08.07.png

训练与比较

截屏2023-10-20 10.10.47.png