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

大白话彻底听懂PyTorch autograd的底层逻辑

博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》被PyTorch autograd坑到凌晨三点终于摸清了反向传播的底裤文章目录上周写自定义层时梯度全为0。我盯着屏幕从下午熬到凌晨报错信息就一句“grad is None”。翻遍文档发现根本不是代码写错——是脑子没转过弯。问题报错我写了这个ReLU变种defcustom_relu(x):returnx*(x0)# 用张量比较实现训练时直接调用xtorch.tensor([1.0,-1.0],requires_gradTrue)ycustom_relu(x)y.sum().backward()# 梯度全0print(x.grad)# 输出tensor([0., 0.])我反复检查输入输出明明逻辑没问题啊核心根源autograd不是魔法它就是个记账本。每一步操作比如x * y它都记一笔。反向时按账本用链式法则算梯度。但x 0是Python的布尔比较不是PyTorch操作autograd看不见这步账本漏记了反向时自然算不出梯度。简单说它只认torch.relu这种操作不认if x0这种Python逻辑错误示范 vs 正确姿势错误只写前向没告诉autograd怎么反向importtorch xtorch.tensor([1.0,-1.0],requires_gradTrue)# 错误自定义函数没实现backwardycustom_relu(x)# 问题在这里y.sum().backward()# 梯度全0print(x.grad)# tensor([0., 0.])正确必须继承Function实现backwardimporttorchclassCustomReLU(torch.autograd.Function):staticmethoddefforward(ctx,x):# 保存中间变量反向要用ctx.save_for_backward(x)returnx*(x0)# 这里x0是PyTorch操作autograd会记录staticmethoddefbackward(ctx,grad_output):# 关键手动算梯度x,ctx.saved_tensors grad_xgrad_output.clone()grad_x[x0]0# 梯度掩码负值梯度设为0returngrad_x xtorch.tensor([1.0,-1.0],requires_gradTrue)yCustomReLU.apply(x)# 用apply调用y.sum().backward()print(x.grad)# tensor([1., 0.]) ✅ 正确避坑总结自定义操作必继承Function没写backwardautograd直接给你0梯度别问为什么。forward里用PyTorch操作x 0是合法的因为是张量比较但别用if x0这种Python逻辑它不被记录。测试梯度写完马上用torch.autograd.gradcheck验证别等到训练崩溃。核心真相autograd不是黑盒。它只负责按账本算你得把账本填对。我踩过坑才懂反向传播不是自动的是你告诉它怎么算的。现在写模型先写backward再写forward效率高多了。别再被梯度消失坑了——可能只是你的账本漏记了一页。
http://www.gsyq.cn/news/1393381.html

相关文章:

  • SQL工程师技能大揭秘:从数据量级处理到业务交互分析
  • 拉曼光谱基线漂移救星:深入理解多项式拟合校正中的‘残差判断’与‘峰值消除’
  • 铁桶厂家生产规模与产能——偃师市中原制桶有限公司 - 速递信息
  • EyesGuard:你的数字护眼管家,告别屏幕疲劳的终极方案
  • 百度脑图KityMinder:开源思维导图工具让你的创意无限延伸
  • 成都西装定制日常必逛实力店铺 - 西装爱好者
  • 为什么你的团队还在用Selenium硬编码?Lovable声明式测试范式已成2024头部科技公司准入标准
  • 技术赋能童趣新生态 童梦奇遇AI定制绘本引领亲子文创全新升级
  • 序列化和反序列化二叉搜索树(一)
  • 告别黑屏!手把手教你为OpenCore 0.8.5换上高颜值GUI启动菜单(附主题资源)
  • Hyper-V也能玩转GPU?Win11专业版搭建直通GPU的Ubuntu虚拟机实战
  • RIS-SWIPT系统硬件损伤与相位幅度耦合建模及性能分析
  • 告别U盘!手把手教你用Samba在Ubuntu 22.04上搭个家庭文件共享中心
  • 沈阳名表去哪里回收靠谱?内行人真实测评分享 - 合扬奢侈品交易中心
  • 保姆级教程:在VMware Workstation 17 Pro上绕过TPM 2.0,成功安装Windows 11虚拟机
  • 嵌入式直流输电电压交互评估:从黑盒仿真到白盒解析的EVIF方法
  • 在Ubuntu 20.04上搞定ORB-SLAM2与ROS Noetic的OpenCV版本冲突(附完整解决方案)
  • 别再乱删了!深入理解Linux中libc.so.6与glibc版本的那些事儿
  • 联合语音-文本嵌入架构:统一模型实现ASR、TTS与说话人识别
  • 2026丽江市本地人必选的水质检测专业机构TOP7推荐!生活饮用水检测、直饮水检测、污水废水检测、矿泉水检测,正规CMA资质检测公司排名推荐 (2026年5月水质检测最新深度调研方案) - 防水补漏3
  • 实战指南:构建现代化Nginx监控系统的完整方案
  • Unity下载慢的真相:中国版与国际版下载机制深度对比
  • Cats Blender插件:从模型混乱到VRChat就绪的5分钟革命
  • LRCGET歌词同步神器:快速为数千首本地音乐批量下载歌词的终极解决方案
  • 2026年5月晋城装修企业如何选择?这份避坑指南助您精准决策认准晋城市美宅铄鼎商贸有限公司 - 2026年企业资讯
  • ChatGPT批量处理正在失效?OpenAI 2024 Q2策略升级后,这4类旧脚本必须在72小时内重构(附迁移检查清单)
  • AI Agent驱动的工业物联网闭环控制实践(从PoC到万台部署全链路拆解)
  • 黄州黄金回收深度科普:2026年5月金价高位运行,三大渠道怎么选才不亏? - 润富黄金珠宝行
  • 2026年楚雄短视频代运营与GEO优化全攻略:实体店如何用内容获客突破流量困局 - 精选优质企业推荐官
  • UES256:基于SHA-256与汉明码的脆弱音频水印方案解析