torch.Tensor实例中设置torch.Tensor=True将会记录所有的操作记录。当完成一系列计算后可以使用.backward()方法自动计算梯度。而这个梯度将会累加在.grad属性上。
.detach()方法可以停止追踪历史,未来的计算也不会被记录。
with torch.no_grad():可以实现.detach()。这对我们验证模型有很大的好处,因为在验证模型的时候,我们不需要计算梯度。

1.

1.创建

import torch
x = torch.ones(2, 2, requires_grad=True)
print(x)
---------------------------------------
tensor([[1., 1.],[1., 1.]], requires_grad=True)
---------------------------------------

2.对tensor进行操作

y = x + 2
print(y)
---------------------------------------
tensor([[3., 3.],[3., 3.]], grad_fn=<AddBackward0>)

3.y是操作后的结果,所以它有一个grad_fn

print(y.grad_fn)
---------------------------------------
<AddBackward0 object at 0x7f67610c4160>

4.再对y进行更多的操作

z = y * y * 3
out = z.mean()
print(z, out)
---------------------------------------
tensor([[27., 27.],[27., 27.]], grad_fn=<MulBackward0>) tensor(27., grad_fn=<MeanBackward0>)

其他,requires_grad默认是False可以通过.requires_grad_( ... )来改变

a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)
------------------------------------------
False
True
<SumBackward0 object at 0x7f67610c4e48>

2.Gradients

开始反向传播,因为out包含单一标量,out.backward()等价于out.backward(torch.tensor(1.))

out.backward()

打印梯度d(out)/dx

print(x.grad)
------------------------------
tensor([[4.5000, 4.5000],[4.5000, 4.5000]])


This characteristic of vector-Jacobian product makes it very convenient to feed external gradients into a model that has non-scalar output.
Now let’s take a look at an example of vector-Jacobian product:

x = torch.randn(3, requires_grad=True)y = x * 2
while y.data.norm() < 1000:y = y * 2print(y)
---------------------------------------------
tensor([ -245.0464, -1939.2114,   -11.0651], grad_fn=<MulBackward0>)
----------------------------------------------

y已经不是标量,torch.autograd不能计算全部的,Jacobian,但我们还是想要vector-Jacobian,那就向backward中传入参数:

v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float)
y.backward(v)print(x.grad)
-----------------------------------
tensor([1.0240e+02, 1.0240e+03, 1.0240e-01])

参考:
https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py

pytorch AUTOGRAD相关推荐

  1. 实操教程|PyTorch AutoGrad C++层实现

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨xxy-zhihu@知乎 来源丨https://zhuanla ...

  2. c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd

    这篇文章将要解释pytorch autograd文档中的vector-Jacobian product. 文章由pytorch 官方文档中的这段话引出. 首先,雅各比矩阵J计算的是向量Y对于向量X的导 ...

  3. Pytorch autograd.grad与autograd.backward详解

    Pytorch autograd.grad与autograd.backward详解 引言 平时在写 Pytorch 训练脚本时,都是下面这种无脑按步骤走: outputs = model(inputs ...

  4. Pytorch Autograd (自动求导机制)

    Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logistic回归模型来介绍Pytorch的自动求导机制.首先, ...

  5. pytorch autograd整理

    网上有不少介绍这个的,我再自己整理一遍以加强理解,便于以后查阅. Pytorch已经成为超越Tensorflow,成为当前最流行的深度学习框架.我觉得作为一个深度学习框架,最重要的就是两大块,一个是对 ...

  6. pytorch - autograd与逻辑回归

    1.torch.autograd--自动求导系统 深度学习模型的训练就是不断更新权值,权值的更新需要求解梯度,梯度在模型训练中是至关重要的.然而求解梯度十分繁琐,pytorch提供自动求导系统.我们不 ...

  7. pytorch autograd计算标量函数二阶导数

    计算标量函数:y=x3+sin(x)y=x^3+sin(x)y=x3+sin(x) 在x=1,π,5x=1,\pi,5x=1,π,5时的一阶导dydx\frac{dy}{dx}dxdy​和二阶导d2y ...

  8. PyTorch Autograd(backward grad 等PyTorch核心)

    文章目录 绪论 1. PyTorch基础 2. 人工神经网络和反向传播 3. 动态计算图(dynamic computational graph) 4. 反向函数(Backward()) 5. 数学: ...

  9. pytorch autograd 自动微分与梯度更新

    自动微分 原理 pytorch 内置了常见 tensor 操作的求导解析解. 从 loss 到 parameter 是若干个 op 叠加起来的复合函数, 所以用链式法则逐个计算. tensor.gra ...

最新文章

  1. php投票系统连接数据库,PHP开发简单投票系统之创建数据库和表
  2. 正式环境docker部署hyperf_Hyperf使用docker-compose集群部署
  3. Buuctf(pwn)[OGeek2019]babyrop
  4. 集群高并发情况下如何保证分布式唯一全局ID生成
  5. 在maven 2工程中加入iTextAsian支持(maven添加自定义jar包到本地仓库)
  6. LeetCode题目总结-滑窗法
  7. 问题及解决 —— 浏览器问题
  8. [虚树dp] bzoj2286: Sdoi2011消耗战
  9. 华北理工大学计算机考研怎么样,华北理工大学考研难吗
  10. phpcms v9 邓士鹏(石家庄职业技术学院)
  11. C语言学习:一个函数可以有几个返回值?
  12. androidStudio Lambda表达式的引入
  13. python安装random_如何安装python randon
  14. mysqldatareader什么意思_MySqlDataReader
  15. python爬虫读取pdf_Python读取PDF内容
  16. [已解决]显示器分屏只能复制无法扩展
  17. PRD-产品需求说明文档
  18. Cocoapod方式引入百川SDK -报错[!] Unable to find a specification for `xxx`
  19. 开发一个APP大概需要多少钱
  20. [Java] lomboz eclipse 下载. 后来安装启动报错,google了好久,未果。放弃之,转Myeclipse

热门文章

  1. android 模仿微信布局,【Android初学者】框架布局:仿微信页面制作
  2. python wmi 显卡型号_python - wmi模块学习(windwos硬件信息获取)
  3. 微课|中学生可以这样学Python(8.4节):递归算法例题讲解2
  4. Python可以这样学(第八季:课堂教学管理系统设计与开发实战)-董付国-专题视频课程...
  5. 数据中心安全风控_平安银行Hadoop集群跨数据中心迁移项目告捷项目骨干专访
  6. linux纯文字界面,Linux入门 Part1: 使用控制台(1)-纯文本界面
  7. 修改ip和计算机名,批量设置IP地址和计算机名
  8. staruml java_非常详细的StarUML使用教程,推荐阅读!
  9. 备份mysql_mysql备份及pymysql
  10. android河流曲线控件,London | Riverwalk,河流曲线的黄金比例