3.Introduction to PyTorch YouTube Series--Autograd 前言学习地址方向导数研究函数在某一点处沿某个方向的变化率梯度本质是一个向量它的方向是函数在某一点处方向导数取得最大值的方向也就是某一点处变化率最快的方向它的向量模就意味着最大值。python中的autograd运行时动态地追踪你的计算过程也可以轻松的计算梯度我们通过研究损失函数的梯度来不断的修正深度学习方向使用简单示例用requires_grad开启计算图跟踪用backward()对一个函数来求梯度也就是对各个自变量的偏导按照数学上的定义用grad来获得的只是某个自变量的偏导值但是在pytorch中很多时候直接称grad拿到的就是梯度。# 创建一个0-2pi上均匀分布的含有25个元素的张量atorch.linspace(0.0,2.0*math.pi,steps25,requires_gradTrue)print(a)btorch.sin(a)# 输出中可以看到b是怎么来的print(b)# matplotlib 要求输入为 NumPy 数组所以需要在绘图前进行分离plt.plot(a.detach(),b.detach())c2*b1outc.sum()out.backward()# 只能获取叶子节点(也就是自变量)的梯度输入端a可以b、c都不行print(a.grad)plt.plot(a.detach(),a.grad.detach())plt.show()训练模型中的autograd通过一个实际的训练模型来了解到autograd的意义BATCH_SIZE16# 批次大小一次处理16个样本DIM_IN1000# 输入维度每个样本有1000个特征HIDDEN_SIZE100# 隐藏层大小中间层有100个神经元DIM_OUT10# 输出维度每个样本输出10个值classTinyModel(torch.nn.Module):def__init__(self):# 初始化层结构三层神经网络super(TinyModel,self).__init__()self.layer1torch.nn.Linear(DIM_IN,HIDDEN_SIZE)self.relutorch.nn.ReLU()self.layer2torch.nn.Linear(HIDDEN_SIZE,DIM_OUT)# 对基类方法的重写torch.nn.Module 在底层实现了 __call__ 方法并会在其中调用forwarddefforward(self,x):# 前向传播描述了数据进入模型后的计算顺序xself.layer1(x)xself.relu(x)xself.layer2(x)returnxdeft2():some_inputtorch.randn(BATCH_SIZE,DIM_IN,requires_gradFalse)ideal_outputtorch.randn(BATCH_SIZE,DIM_OUT,requires_gradFalse)modelTinyModel()# 查看权重print(------------weight1-----------------)print(model.layer2.weight[0][0:10])print(model.layer2.weight.grad)# 把模型中的layer1和layer2的权重传进来作为可优化的参数训练后计算均方误差optimizertorch.optim.SGD(model.parameters(),lr0.001)predictionmodel(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_noneFalse)print(model.layer2.weight.grad[0][0:10])在这段代码中关于梯度有几个值得注意的点1.普通张量的梯度开关默认是False而训练模型中的参数如权重张量的开关默认是True所以最后的结果是可以求梯度的2.模型的改进在于权重比如一个线性模型yAxb研究的就是A、b哪一个更合适而输入是给定的所以求权重的梯度并改进权重才是训练模型应该做的3.PyTorch 的 loss.backward() 默认要求调用者必须是一个标量4.多次训练会存在梯度累加的问题而我们的模型往往需要循环训练多次因此每轮训练后要做梯度清零的操作# 标准的训练循环模式forepochinrange(num_epochs):# 1. 必须先清空梯度optimizer.zero_grad()# 2. 前向传播predictionmodel(some_input)# 3. 计算损失loss(ideal_output-prediction).pow(2).sum()# 4. 反向传播计算当前 Batch 的梯度loss.backward()# 5. 更新参数optimizer.step()梯度的原地操作在使用autograd时必须谨慎使用原地操作因为这样做可能会破坏在调用backward()时计算导数所需的信息进而报错比如atorch.linspace(0.,2.*math.pi,steps25,requires_gradTrue)a.sin_()

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/30 19:41:56
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻