当前位置: 首页 > news >正文

3.Introduction to PyTorch YouTube Series--Autograd

前言

学习地址
方向导数:研究函数在某一点处沿某个方向的变化率

梯度:本质是一个向量,它的方向是函数在某一点处方向导数取得最大值的方向,也就是某一点处变化率最快的方向,它的向量模就意味着最大值。

python中的autograd:运行时动态地追踪你的计算过程,也可以轻松的计算梯度,我们通过研究损失函数的梯度来不断的修正深度学习方向

使用

简单示例

requires_grad开启计算图跟踪,用backward()对一个函数来求梯度(也就是对各个自变量的偏导),按照数学上的定义,用grad来获得的只是某个自变量的偏导值,但是在pytorch中,很多时候直接称grad拿到的就是梯度。

# 创建一个0-2pi上均匀分布的含有25个元素的张量a=torch.linspace(0.0,2.0*math.pi,steps=25,requires_grad=True)print(a)b=torch.sin(a)# 输出中可以看到b是怎么来的print(b)# matplotlib 要求输入为 NumPy 数组,所以需要在绘图前进行分离plt.plot(a.detach(),b.detach())c=2*b+1out=c.sum()out.backward()# 只能获取叶子节点(也就是自变量)的梯度,输入端a可以,b、c都不行print(a.grad)plt.plot(a.detach(),a.grad.detach())plt.show()

训练模型中的autograd

通过一个实际的训练模型来了解到autograd的意义

BATCH_SIZE=16# 批次大小:一次处理16个样本DIM_IN=1000# 输入维度:每个样本有1000个特征HIDDEN_SIZE=100# 隐藏层大小:中间层有100个神经元DIM_OUT=10# 输出维度:每个样本输出10个值classTinyModel(torch.nn.Module):def__init__(self):# 初始化层结构,三层神经网络super(TinyModel,self).__init__()self.layer1=torch.nn.Linear(DIM_IN,HIDDEN_SIZE)self.relu=torch.nn.ReLU()self.layer2=torch.nn.Linear(HIDDEN_SIZE,DIM_OUT)# 对基类方法的重写,torch.nn.Module 在底层实现了 __call__ 方法,并会在其中调用forwarddefforward(self,x):# 前向传播,描述了数据进入模型后的计算顺序x=self.layer1(x)x=self.relu(x)x=self.layer2(x)returnxdeft2():some_input=torch.randn(BATCH_SIZE,DIM_IN,requires_grad=False)ideal_output=torch.randn(BATCH_SIZE,DIM_OUT,requires_grad=False)model=TinyModel()# 查看权重print("------------weight1-----------------")print(model.layer2.weight[0][0:10])print(model.layer2.weight.grad)# 把模型中的layer1和layer2的权重传进来作为可优化的参数,训练后计算均方误差optimizer=torch.optim.SGD(model.parameters(),lr=0.001)prediction=model(some_input)loss=(ideal_output-prediction).pow(2).sum()print(loss)# 普通张量的requires_grad默认是false,但是模型参数比如权值的是true,所以最后的结果也是true# 为权值计算梯度,但是权值相较上面还没有发生变化,因为optimizer优化器还没有启动loss.backward()print("--------------weight2---------------")print(model.layer2.weight[0][0:10])print(model.layer2.weight.grad[0][0:10])optimizer.step()print("--------------weight3---------------")print(model.layer2.weight[0][0:10])print(model.layer2.weight.grad[0][0:10])# 梯度清零,否则每次调用 loss.backward() 时,算出的梯度不会覆盖参数上已有的.grad# 而是累加到 .grad 属性中。optimizer.zero_grad(set_to_none=False)print(model.layer2.weight.grad[0][0:10])

在这段代码中关于梯度有几个值得注意的点:
1.普通张量的梯度开关默认是False,而训练模型中的参数,如权重张量的开关默认是True,所以最后的结果是可以求梯度的
2.模型的改进在于权重,比如一个线性模型y=Ax+b,研究的就是A、b哪一个更合适,而输入是给定的,所以求权重的梯度并改进权重才是训练模型应该做的
3.PyTorch 的 loss.backward() 默认要求调用者必须是一个标量
4.多次训练会存在梯度累加的问题,而我们的模型往往需要循环训练多次,因此每轮训练后要做梯度清零的操作

# 标准的训练循环模式forepochinrange(num_epochs):# 1. 必须先清空梯度!optimizer.zero_grad()# 2. 前向传播prediction=model(some_input)# 3. 计算损失loss=(ideal_output-prediction).pow(2).sum()# 4. 反向传播(计算当前 Batch 的梯度)loss.backward()# 5. 更新参数optimizer.step()

梯度的原地操作

在使用autograd时,必须谨慎使用原地操作,因为这样做可能会破坏在调用backward()时计算导数所需的信息,进而报错,比如:

a=torch.linspace(0.,2.*math.pi,steps=25,requires_grad=True)a.sin_()

http://www.jsqmd.com/news/1332698/

相关文章:

  • Windows DOS命令实战:从基础操作到批处理脚本开发
  • 武汉电气自动化培训招生简章|2026中南智能工控课程收费、就业安排全面介绍 - 学途指南
  • 终极指南:四步让老旧Mac焕然新生,完整OpenCore Legacy Patcher教程
  • B站成分检测器:3分钟看懂评论区用户真实身份,告别信息盲区
  • 【深度解析】化妆品级炉甘石粉:特性解析与护肤应用指南 - 全域品牌推荐
  • 闲鱼防关联系统:多线程不抢焦,告别网页卡死报错
  • 工业自动化职业选择:机器视觉与PLC技能栈构建指南
  • 20分钟上手WorkBuddy:用自然语言指令实现办公自动化
  • Nintendo Switch游戏文件管理利器:NSC_BUILDER完全指南
  • 达梦数据库【安装篇】01:CentOS7.5安装达梦数【DM8】数据库
  • 2026国内地坪漆供应商大盘点:合规资质、实力解析与选型避坑全指南附FAQs - U渠道
  • 跨平台鼠标连点器完全指南:3步实现高效自动化点击
  • FPGA实现线性相位FIR滤波器:结构选型、资源优化与Vivado实战
  • ComfyUI-VideoHelperSuite:AI视频处理的终极解决方案
  • 孕早期减缓妊娠纹产品推荐|刚怀孕就要开始涂吗?怎么选?一篇讲透 - 甄选测评馆
  • 终极解决方案:3分钟搞定Windows识别iPhone网络共享驱动难题
  • ThinkPad风扇控制新境界:TPFanCtrl2让你的笔记本更安静更高效
  • 2026年8月白云区合同纠纷律师机构哪家好,民间借贷律师机构推荐|吴学超律师地址核对|电话18208512898与到店准备|资料更新2026年8月5日 - geo88
  • 怎么防止多 Agent 并行开发时的代码冲突?
  • Stable Diffusion实战:从提示词到ControlNet,打造可控AI人物图像生成工作流
  • Windows苹果设备驱动一键安装:3分钟解决iPhone USB网络共享难题
  • 3步掌握BlenderKit:免费3D资产库终极使用指南
  • 苏州全域直营黄金回收门店,资质公示随时可核验 - 奢侈品回收评测
  • douyin-downloader:颠覆性抖音内容采集解决方案,实现95%去重准确率与420%效率提升
  • 搜索推荐系统评估:Precision@k、Recall@k、F1@k与NDCG@k详解与应用
  • Windows 11 LTSC微软商店安装:3步快速恢复完整应用生态
  • 佛山活动车棚:3种实用场景的用户案例与选型经验分享 - 品牌优选官
  • 2026年石景山区ISO27001信息安全管理体系认证机构哪家好,ISO20000信息技术服务管理体系认证机构推荐|地址、电话与到店准备|2026年8月5日资料更新 - geo88
  • 音乐情感计算:从音频特征到AI生成,解码歌曲“悲伤感”的技术原理与实践
  • 机器学习实战:从核心概念到工业应用全解析