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

某网站栏目策划工业设计优秀作品

某网站栏目策划,工业设计优秀作品,东西湖注册公司,机关事业单位 网站建设方案书【深度学习】—— 自动微分 自动微分一个简单的例子 非标量变量的反向传播分离计算Python控制流的梯度计算 自动微分 求导是⼏乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单#xff0c;只需要⼀些基本的微积分。但对于复杂的模型#xff0c;⼿⼯进⾏更新是⼀件很… 【深度学习】—— 自动微分 自动微分一个简单的例子 非标量变量的反向传播分离计算Python控制流的梯度计算 自动微分 求导是⼏乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单只需要⼀些基本的微积分。但对于复杂的模型⼿⼯进⾏更新是⼀件很痛苦的事情⽽且经常容易出错。深度学习框架通过⾃动计算导数即⾃动微分automatic differentiation来加快求导。实际中根据我们设计的模型系统会构建⼀个计算图computational graph来跟踪计算是哪些数据通过哪些操作组合起来产⽣输出。⾃动微分使系统能够随后反向传播梯度。这⾥反向传播backpropagate意味着跟踪整个计算图填充关于每个参数的偏导数。 一个简单的例子 作为一个演示例子假设我们想对函数 y 2 x ⊤ x y 2\mathbf{x}^\top \mathbf{x} y2x⊤x 关于列向量 x \mathbf{x} x 求导。首先我们创建列向量 x \mathbf{x} x 并为其分配一个初始值。 import torch x torch.arange(4.0).view(-1, 1) # 将 x 转换为列向量 x输出 tensor([0., 1., 2., 3.])在我们计算 y y y 关于 x \mathbf{x} x 的梯度之前我们需要一个地方来存储梯度。重要的是我们不会在每次对一个参数求导时都分配新的内存。因为我们经常会成千上万次地更新相同的参数每次都分配新的内存可能很快就会将内存耗尽。注意一个标量函数关于向量 x \mathbf{x} x 的梯度是向量并且与 x \mathbf{x} x 具有相同的形状。 x.requires_grad_(True) # 等价于 x torch.arange(4.0).view(-1, 1).requires_grad_(True) x.grad # 默认值是 None现在让我们计算 y y y。 y 2 * torch.dot(x, x) y输出 tensor(28., grad_fnMulBackward0)x \mathbf{x} x 是一个 4×1 的列向量计算 x ⊤ x \mathbf{x}^\top \mathbf{x} x⊤x 得到一个标量输出。接下来我们通过调用反向传播函数来自动计算 y y y 关于 x \mathbf{x} x 每个分量的梯度并打印这些梯度。 y.backward() x.grad输出 tensor([ 0., 4., 8., 12.])函数 y 2 x ⊤ x y 2\mathbf{x}^\top \mathbf{x} y2x⊤x 关于 x \mathbf{x} x 的梯度应为 4 x 4\mathbf{x} 4x。让我们快速验证这个梯度是否计算正确。 x.grad 4 * x输出 tensor([[True],[True],[True],[True]])现在让我们计算 x \mathbf{x} x 的另一个函数。 # 在默认情况下PyTorch会累积梯度我们需要清除之前的值 x.grad.zero_() y x.sum() y.backward() x.grad输出 tensor([[1.],[1.],[1.],[1.]])非标量变量的反向传播 当 y y y 不是标量时向量 y \mathbf{y} y 关于向量 x \mathbf{x} x 的导数的最自然解释是一个矩阵。对于高阶和高维的 y \mathbf{y} y 和 x \mathbf{x} x求导的结果可以是一个高阶张量。 然而虽然这些更奇特的对象确实出现在高级机器学习中包括深度学习中但当我们调用向量的反向计算时我们通常会试图计算一批训练样本中每个组成部分的损失函数的导数。在这里我们的目的不是计算微分矩阵而是单独计算批量中每个样本的偏导数之和。 对非标量调用 backward 需要传入一个 gradient 参数该参数指定微分函数关于 self 的梯度 在我们的例子中我们只想求偏导数的和所以传递一个 1 的梯度是合适的。 x.grad.zero_() y x * x # 等价于 y.backward(torch.ones(len(x))) y.sum().backward() x.grad分离计算 有时我们希望将某些计算移动到记录的计算图之外。例如假设 y y y 是作为 x x x 的函数计算的而 z z z 则是作为 y y y 和 x x x 的函数计算的。想象一下我们想计算 z z z 关于 x x x 的梯度但由于某种原因我们希望将 y y y 视为一个常数并且只考虑到 x x x 在 y y y 被计算后发挥的作用。 在这里我们可以分离 y y y 来返回一个新变量 u u u该变量与 y y y 具有相同的值但丢弃计算图中如何计算 y y y 的任何信息。换句话说梯度不会向后流经 u u u 到 x x x。因此下面的反向传播函数计算 z u ⋅ x z u \cdot x zu⋅x 关于 x x x 的偏导数同时将 u u u 作为常数处理而不是 z x ⋅ x ⋅ x z x \cdot x \cdot x zx⋅x⋅x 关于 x x x 的偏导数。 x.grad.zero_() y x * x u y.detach() z u * x z.sum().backward() x.grad u输出 tensor([True, True, True, True])由于记录了 y y y 的计算结果我们可以随后在 y y y 上调用反向传播得到 y x ⋅ x y x \cdot x yx⋅x 关于 x x x 的导数即 2 ⋅ x 2 \cdot x 2⋅x。 x.grad.zero_() y.sum().backward() x.grad 2 * x输出 tensor([True, True, True, True])以下是根据您提供的内容整理成的 Markdown 源码使用 LaTeX $ 包裹公式和符号并确保代码格式正确 Python控制流的梯度计算 使用自动微分的一个好处是即使构建函数的计算图需要通过 Python 控制流例如条件、循环或任意函数调用我们仍然可以计算得到的变量的梯度。在下面的代码中while 循环的迭代次数和 if 语句的结果都取决于输入 a a a 的值。 def f(a):b a * 2while b.norm() 1000:b b * 2if b.sum() 0:c belse:c 100 * breturn c让我们计算梯度。 a torch.randn(size(), requires_gradTrue) d f(a) d.backward()我们现在可以分析上面定义的 f f f 函数。请注意它在其输入 a a a 中是分段线性的。换言之对于任何 a a a存在某个常量标量 k k k使得 f ( a ) k ⋅ a f(a) k \cdot a f(a)k⋅a其中 k k k 的值取决于输入 a a a。因此我们可以用 d / a d / a d/a 验证梯度是否正确。 a.grad d / a输出 tensor(True)• 深度学习框架可以⾃动计算导数我们⾸先将梯度附加到想要对其计算偏导数的变量上。然后我们记录⽬标值的计算执⾏它的反向传播函数并访问得到的梯度。
http://www.w-s-a.com/news/673387/

相关文章:

  • 比较好的网页模板网站浦项建设(中国)有限公司网站
  • 有趣的个人网站网页设计与制作的岗位职责
  • 有建设网站的软件吗长沙做网站的公司对比
  • 网站的外链接数中铝长城建设有限公司网站
  • 北京建设网站公司网站建设费用 无形资产
  • 适合seo的建站系统如何建立网页
  • 我想自己建立一个网站给大家分享个永久免费的云服务器
  • 怎样做网站和网站的友情链接官网优化 报价
  • 购买网站空间大小聊城网站空间公司
  • 做像美团淘宝平台网站多少钱开发网站企业
  • 网站建设前期费用二手购物网站策划书
  • dede学校网站百度联盟是什么
  • 献县网站建设网站开发专业定制
  • 龙华做网站yihe kj安徽六安彩礼一般给多少
  • flash网站建设公司我的小程序在哪里找
  • 建网站需要数据库吗如何制作简单的网页链接
  • 杭州设计企业网站高端公司上虞做网站公司
  • 做网站能赚钱么用wordpress搭建知名网站
  • 阿里云服务器网站开发青岛做网站找哪家
  • 凡科做的网站为什么打不开织梦cms仿某作文网站整站源码(带采集)安装数据库
  • 免费h5模板网站模板汽车报价网址
  • 蔡甸网站建设烟台网站建设yt
  • 最流行的网站开发新开的网页游戏平台
  • 暴富建站wordpress 标签分类
  • 搞笑网站源码百度快照替代
  • 重庆网站建设哪家公司哪家好关键词是怎么排名的
  • 青县网站建设今天国际大事新闻
  • 深圳正规网站制作哪里好怎样优化网络
  • 米拓网站建设教程dw成品网站成品视频教学
  • 用jsp做的网站源代码天门网站网站建设