自动求导

假设我们想对函数 y=2x⊤xy = 2\mathbf{x}^{\top}\mathbf{x}y=2x⊤x关于列向量 x\mathbf{x}x求导

import torchx = torch.arange(4.0)
x
tensor([0., 1., 2., 3.])

在我们计算yyy关于x\mathbf{x}x的梯度之前,我们需要一个地方来存储梯度

x.requires_grad_(True)
x.grad

现在让我们计算 yyy

y = 2 * torch.dot(x, x)
y
tensor(28., grad_fn=<MulBackward0>)

通过调用反向传播函数来自动计算y关于x 每个分量的梯度

y.backward()
x.grad
tensor([ 0.,  4.,  8., 12.])
x.grad == 4 * x
tensor([True, True, True, True])

现在让我们计算 x 的另一个函数

x.grad.zero_()#计算之前需要清空x的梯度
y = x.sum()
y.backward()
x.grad
tensor([1., 1., 1., 1.])

深度学习中
,我们的目的不是计算微分矩阵,而是批量中每个样本单独计算的偏导数之和

x.grad.zero_()
y = x * x
y.sum().backward()
x.grad
tensor([0., 2., 4., 6.])

将某些计算移动到记录的计算图之外

x.grad.zero_()
y = x * x
u = y.detach()
z = u * xz.sum().backward()
x.grad == u
tensor([True, True, True, True])
x.grad.zero_()
y.sum().backward()
x.grad == 2 * x
tensor([True, True, True, True])

即使构建函数的计算图需要通过 Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度

def f(a):b = a * 2while b.norm() < 1000:b = b * 2if b.sum() > 0:c = belse:c = 100 * breturn ca = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()a.grad == d / a
tensor(True)

pytorch自动求导-07相关推荐

  1. 用numpy、PyTorch自动求导、torch.nn库实现两层神经网络

    用numpy.PyTorch自动求导.torch.nn库实现两层神经网络 1 用numpy实现两层神经网络 2 用PyTorch自动求导实现两层神经网络 2.1 手动求导 2.2 gradient自动 ...

  2. 【深度学习】pytorch自动求导机制的理解 | tensor.backward() 反向传播 | tensor.detach()梯度截断函数 | with torch.no_grad()函数

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pytorch里自动求导的基础概念 1.1.自动求导 requires_grad=True 1.2.求导 requ ...

  3. PyTorch 笔记Ⅱ——PyTorch 自动求导机制

    文章目录 Autograd: 自动求导机制 张量(Tensor) 梯度 使用PyTorch计算梯度数值 Autograd 简单的自动求导 复杂的自动求导 Autograd 过程解析 扩展Autogra ...

  4. 机器学习 标量、向量、矩阵的求导 PyTorch自动求导

    1 说明 本文是学习Dive into Deep Learning中相应内容做出的总结和一些实现代码,原文链接:矩阵计算. 2 求导 学习PyTorch的自动求导之前首先需要知道求导的过程. 注意:可 ...

  5. pytorch自动求导机制

    Torch.autograd 在训练神经网络时,我们最常用的算法就是反向传播(BP). 参数的更新依靠的就是loss function针对给定参数的梯度.为了计算梯度,pytorch提供了内置的求导机 ...

  6. pytorch自动求导

    1.求导 params = torch.tensor([1.0, 0.0], requires_grad=True) 注意到了张量构造函数的 require_grad = True 吗?这个参数告诉P ...

  7. pytorch自动求梯度—详解

    构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数.搭建计算图的过程,称为"正向传播",这个是需要我们自己 ...

  8. python二元函数求导_tensorflow的函数自动求导是如何实现的?

    最近在上关于 自动求导 (Automatic Differentiation, AD) 的课程 (CS207),正好来回答一下. 其实不只是 TensorFlow,Pytorch 这些为深度学习设计的 ...

  9. 【PyTorch基础教程2】自动求导机制(学不会来打我啊)

    文章目录 第一部分:深度学习和机器学习 一.机器学习任务 二.ML和DL区别 (1)数据加载 (2)模型实现 (3)训练过程 第二部分:Pytorch部分 一.学习资源 二.自动求导机制 2.1 to ...

最新文章

  1. 搭建java_搭建java开发环境
  2. 业务总结001:优惠券与礼包活动
  3. BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )
  4. linux系统中扩展一个逻辑卷,Linux 创建及扩展逻辑卷
  5. php改vue,修改.vue · 柳鑫鹏/1702phpA - Gitee.com
  6. PLSQL中文显示乱码
  7. ctype.h(c标准库)
  8. [导入]Asp.net页面的生命周期之通俗理解
  9. 4.企业安全建设入门(基于开源软件打造企业网络安全) --- 威胁情报
  10. [daily][device] linux挂载iphone
  11. 短信接口的功能及适用范围
  12. 身为程序猿——谷歌浏览器的这些骚操作你真的会吗
  13. HTML居中对齐样例
  14. java永久区_方法区、永久代和元空间Metaspace
  15. 浙江工业大学计算机与软件学院,浙江工业大学计算机科学与技术学院、软件学院...
  16. Abis接口的概念和引发的商业策略
  17. python-直接删除整个文件夹
  18. 转:使用rz上传压缩文件遇到的一些坑
  19. ai智能写作软件哪个好-ai智能写作免费
  20. 专硕的好消息!北京要大力发展专硕,新增硕士专硕为主!

热门文章

  1. 对于未来chrome80 samesite问题的兼容解决方案
  2. 不支持的major.minor版本52.0 [重复]
  3. Win10怎么让英伟达独立显卡成为主显卡
  4. 用java来实现FIFO先进先出的队列
  5. java后台与ISO端app对接
  6. SpringBoot拦截器配置
  7. Shiro 支持三种方式的授权
  8. python编写命令行框架_使用 Python 和 Click 编写命令行应用程序
  9. 电脑显示器尺寸对照表_三分钟带你了解五花八门的显示器参数,买显示器不在跳坑...
  10. split函数python 未定义_实现python 的split函数