🧠李沐深度学习:基础线性回归模型
00 分钟
2023-7-10
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于我的个人博客:欢迎大佬们来逛逛
深度学习项目地址:Github地址

线性回归

导入基本库
  • random: 用于随机产生数据

随机生成数据

我们生成具有1000个样本的数据集,每个样本都具有两个特征
使用线性模型参数 和噪声项 来构建数据集和标签:
特征服从均值为0,标准差为1,并且是一个 num_examples行,len(w)列的矩阵。
根据传入的 即可随机生成数据集标签值
所需要的函数:
  • torch.normal(mean,std,shape):随机生成均值为mean,标准差为std,形状为shape的矩阵
  • torch.matmul(x,y):类似于torch.mm(x,y),就是两个矩阵的相乘
  • y.reshape(-1,1):改变形状为一列;如果是reshape(1,-1),则表示一行;如果是(-1,2),则表示两列
可以通过 .shape来查看他们的形状,features 是一个(1000,2)的矩阵;labels是一个(1000,1)列的矩阵。

读取数据集

我们将这1000个样本每次抽取小批量的样本然后进行检测。
参数:
  • batch_size:每次抽取的小批量的大小
  • features:样本数据
  • labels:标签集
num_examples获取的是样本的总大小,然后生成一个(0,999)的下标的列表数组为indices。
然后随机打乱这个数组,目的就是为了随机抽取小批量。
然后每次选取batch_size大小的数据样本,并且使用 yield 返回。
所需要的函数:
  • random.shuffle:随机打乱
  • yield:相当于return,不过会记住位置,下次会继续从这个位置开始。

初始化模型参数

初始化参数w和b,w为一个的矩阵,b是一个标量。
  • requires_grad:表示允许求导。

线性模型

构造 的模型。

损失函数

构建单个样本的损失函数:

优化算法

SGD:Stochastic Gradient Descent
参数的更新:
函数的作用:
  • no_grad:不计算梯度
  • grad.zero_:梯度清零,防止做累加

训练

规定迭代器次数为三次,学习率为 0.03,net为神经网络线性回归线性模型函数,loss为损失函数。
从样本集中每次取出小批量样本,然后计算损失函数,并且进行反向传播,最后进行梯度更新,即更新
函数的作用:
  • backward:反向传播

简洁实现

随机生成数据

  • d2l.synthetic_data:随机生成数据。

读取数据

  • data.TensorDataset:类似于python的zip,将两个tensor解压为一起。
  • data.DataLoader:每次读取batch_size个大小的批量从dataset中,并且打乱顺序。

建立模型

nn为神经网络的缩写neural network。里面定义了许多的函数功能。
  • nn.Sequential:类似于容器,把线性模型放在里面,便于访问。
  • nn.Linear:输入维度为2,输出维度为1的模型。
表示取出第一个参数
  • weight:表示 w 参数
  • bias:表示 b 参数
  • data:取出数据
  • normal_ :随机生成数据然后替代之前的data
  • fill_:用0提到之前的data,相当于填充

定义损失函数

  • MSELoss:平方损失函数

定义优化算法

  • torch.optim.SGD:SGD 随机梯度下降算法。

训练


参考自:吴恩达深度学习教程
动手学深度学习
 
 

评论
  • Twikoo
  • Valine