域客式单页网站能申请域名吗,微信官网登录,青岛君哲网站建设公司,婚庆公司价格1 nn.Module #xff08;用于构建模型的底层逻辑#xff09;
介绍
nn.Module 是 torch.nn 中的一个类#xff0c;是pytorch中自定义网络的基类
__init__需要调用super方法#xff0c;继承父类属性和方法forward方法必须实现#xff0c;用来定义网络的向前计算的过程…1 nn.Module 用于构建模型的底层逻辑
介绍
nn.Module 是 torch.nn 中的一个类是pytorch中自定义网络的基类
__init__需要调用super方法继承父类属性和方法forward方法必须实现用来定义网络的向前计算的过程
例y w*x b 的拟合模型
构建
from torch import nn
class Lr(nn.Module): #构建模型逻辑def __init__(self): #定义该层super(Lr,self).__init__() #继承父类的init参数self.linear nn.Linear( aa , bb ) #该层网络的输入数据的维度为aa,输出数据的维度为bbdef forward(self,x): #即 如何由输入的数据x得到输出的结果outout self.linear(x)return out使用
#实例化模型
model Lr()
#传入数据计算结果
pred_y model(x)2 优化器类 optimizer
介绍
优化器是torch为我们封装的用来更新参数的方法
设定优化器 torch.optim.SGD(参数, lr学习率) SGDstochastic gradient descent, 随机梯度下降 ”参数“指 模型中需要被更新的参数; ”参数“一般用model.parameters()函数来获取会获取所有requires_gradTrue的参数 ”学习率“默认为0.001 torch.optim.Adam(参数, lr学习率)
使用优化器
1. 步骤 step 1. 优化器实例化 step 2. 将所有参数的梯度的值初始化为0 step 3. 反向传播更新梯度的值 step 4. 参数值被更新 2. 代码样例
import optim from torch
#step 1. 优化器实例化
optimizer optim.SGD(model.parameters(),lr1e-3)
#待更新参数为model.parameters()
#学习率learning rate 1e-3
#step 2. 将所有参数的梯度的值初始化为0
optimizer.zero_grad() #参数归零函数
#step 3. 反向传播更新梯度的值
loss.backward()
#step 4. 更新参数值
optimizer.step()优化器的算法介绍
1 梯度下降法
(1) BGD 梯度下降法 (batch gradient descent)
每次迭代都将所有样本送入将全局样本的均值作为参考。 简称为全局优化 缺点 每次都要跑全部样本速度慢
(2) SGD 随机梯度下降法(Stochastic gradient descent)
每次从所有样本中随机抽取一个样本进行学习 优点 解决了BGD算法 速度慢的问题 缺点 可能被某个单个异常数据点影响 Python的torch包中的API调用方法 torch.optim.SGD()
(3) MBGD 小批量梯度下降法(Mini-batch gradient descent)
介于(1)和(2)之间的算法每次选取一组样本进行学习
梯度下降法的劣势
过于依赖于合适的学习率。 学习率较小时会导致收敛速度慢 学习率较大时会导致有可能跳过最优解在最值点左右摆动幅度较大
2 AdaGrad
采取动态调整学习率的方法解决梯度下降法的劣势 【个人理解就是把 爬山算法 换成了 模拟退火算法 】
3 动量法 和 RMSProp算法
采取动态调整梯度的移动指数解决梯度下降法的劣势 【个人理解也是把 爬山算法 换成了 模拟退火算法 】
4 Adam算法
相当于 AdaGrad法 和 RMSProp法 的结合 优势 更快达到最优解 劣势 有可能学习得更慢因为最优解很难找到而前面的算法不一定会找到最优解而是误差较大的最优解 Python的torch包中的API调用方法 torch.optim.Adam()
这下就可以看懂第一章的线性回归代码的意思是什么了