pytorch自动求导-07
自动求导
假设我们想对函数 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相关推荐
- 用numpy、PyTorch自动求导、torch.nn库实现两层神经网络
用numpy.PyTorch自动求导.torch.nn库实现两层神经网络 1 用numpy实现两层神经网络 2 用PyTorch自动求导实现两层神经网络 2.1 手动求导 2.2 gradient自动 ...
- 【深度学习】pytorch自动求导机制的理解 | tensor.backward() 反向传播 | tensor.detach()梯度截断函数 | with torch.no_grad()函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pytorch里自动求导的基础概念 1.1.自动求导 requires_grad=True 1.2.求导 requ ...
- PyTorch 笔记Ⅱ——PyTorch 自动求导机制
文章目录 Autograd: 自动求导机制 张量(Tensor) 梯度 使用PyTorch计算梯度数值 Autograd 简单的自动求导 复杂的自动求导 Autograd 过程解析 扩展Autogra ...
- 机器学习 标量、向量、矩阵的求导 PyTorch自动求导
1 说明 本文是学习Dive into Deep Learning中相应内容做出的总结和一些实现代码,原文链接:矩阵计算. 2 求导 学习PyTorch的自动求导之前首先需要知道求导的过程. 注意:可 ...
- pytorch自动求导机制
Torch.autograd 在训练神经网络时,我们最常用的算法就是反向传播(BP). 参数的更新依靠的就是loss function针对给定参数的梯度.为了计算梯度,pytorch提供了内置的求导机 ...
- pytorch自动求导
1.求导 params = torch.tensor([1.0, 0.0], requires_grad=True) 注意到了张量构造函数的 require_grad = True 吗?这个参数告诉P ...
- pytorch自动求梯度—详解
构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数.搭建计算图的过程,称为"正向传播",这个是需要我们自己 ...
- python二元函数求导_tensorflow的函数自动求导是如何实现的?
最近在上关于 自动求导 (Automatic Differentiation, AD) 的课程 (CS207),正好来回答一下. 其实不只是 TensorFlow,Pytorch 这些为深度学习设计的 ...
- 【PyTorch基础教程2】自动求导机制(学不会来打我啊)
文章目录 第一部分:深度学习和机器学习 一.机器学习任务 二.ML和DL区别 (1)数据加载 (2)模型实现 (3)训练过程 第二部分:Pytorch部分 一.学习资源 二.自动求导机制 2.1 to ...
最新文章
- 搭建java_搭建java开发环境
- 业务总结001:优惠券与礼包活动
- BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )
- linux系统中扩展一个逻辑卷,Linux 创建及扩展逻辑卷
- php改vue,修改.vue · 柳鑫鹏/1702phpA - Gitee.com
- PLSQL中文显示乱码
- ctype.h(c标准库)
- [导入]Asp.net页面的生命周期之通俗理解
- 4.企业安全建设入门(基于开源软件打造企业网络安全) --- 威胁情报
- [daily][device] linux挂载iphone
- 短信接口的功能及适用范围
- 身为程序猿——谷歌浏览器的这些骚操作你真的会吗
- HTML居中对齐样例
- java永久区_方法区、永久代和元空间Metaspace
- 浙江工业大学计算机与软件学院,浙江工业大学计算机科学与技术学院、软件学院...
- Abis接口的概念和引发的商业策略
- python-直接删除整个文件夹
- 转:使用rz上传压缩文件遇到的一些坑
- ai智能写作软件哪个好-ai智能写作免费
- 专硕的好消息!北京要大力发展专硕,新增硕士专硕为主!
热门文章
- 对于未来chrome80 samesite问题的兼容解决方案
- 不支持的major.minor版本52.0 [重复]
- Win10怎么让英伟达独立显卡成为主显卡
- 用java来实现FIFO先进先出的队列
- java后台与ISO端app对接
- SpringBoot拦截器配置
- Shiro 支持三种方式的授权
- python编写命令行框架_使用 Python 和 Click 编写命令行应用程序
- 电脑显示器尺寸对照表_三分钟带你了解五花八门的显示器参数,买显示器不在跳坑...
- split函数python 未定义_实现python 的split函数