线性回归的基本实现
1.定义模型和初始化数据
2.定义损失函数和算法优化
3.训练,与人造数据集比对
导入模块
构造人造数据集
这一步相当于将数学题标答写出来作为对照
- 打印绘制人造数据集
设定mini_bash
这一步是生成大小为batch_size的小批量mini_batch,作为样本,打乱顺序,每次取出小批量,以便后续计算损失
定义初始化模型参数
定义损失函数
定义优化算法
训练
比较训练结果
简洁实现
使用深度学习框架简洁实现
导入和创建人造数据集
无需定义x和y的关系,直接使用函数
创建mini_bash
python中,不定长形参用
*args表示,表示这个参数是一个可以传入列表或元组的不定长形参;字典式不定长形参用**kwargs表示,表示这个参数是一个必须传入字典类型数据的不定长形参;
搭建模型和参数初始化
nn.Sequential():一个序列容器,用于搭建神经网络的模块被按照被传入构造器的顺序添加到nn.Sequential()容器中。Sequential中文译为,顺序的,序列的
nn.Linear():用于创建线性层的类。线性层也被称为全连接层,它将输入与权重矩阵相乘并加上偏置,然后通过激活函数进行非线性变换。
参数初始化又称为权重初始化。对模型权重的初始化很重要 如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。
如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。
而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,这就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。