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 随机梯度下降算法。
训练
参考自:吴恩达深度学习教程
动手学深度学习
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/235e0006-207b-44d9-b7d9-bcedc2f0f7cc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。