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 许可协议,转载请注明出处。
 
![[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili](https://i0.hdslb.com/bfs/archive/debebc8b9326ff6f32f591599ee0f8f59b7fe25a.png@100w_100h_1c.png?t=b507184e-48d6-475d-8fe9-3811da17a4c8)

