【Torch笔记】计算图与动态图

1 什么是计算图?

计算图(Computational Graph)是用来 描述运算 的有向无环图,主要由节点和边组成。节点表示数据,如向量、矩阵、张量,边表示运算,如加减乘除等。下图就是 y=(x+w)*(w+1) 的计算图表示:

采用计算图来描述计算,不仅能够使得运算更加简洁,更重要的是能够 使得计算梯度求导更加方便
∂y∂w=∂y∂a∂a∂w+∂y∂b∂b∂w=b⋆1+a⋆1=b+a=(w+1)+(x+w)=2∗w+x+1=2∗1+2+1=5\begin{aligned} \frac{\partial \mathrm{y}}{\partial w} &=\frac{\partial \mathrm{y}}{\partial a} \frac{\partial a}{\partial w}+\frac{\partial \mathrm{y}}{\partial b} \frac{\partial b}{\partial w} \\ &=b \star 1+a \star 1 \\ &=b+a \\ &=(w+1)+(\mathrm{x}+\mathrm{w}) \\ &=2 * w+x+1 \\ &=2 * 1+2+1=5 \end{aligned} ∂w∂y​​=∂a∂y​∂w∂a​+∂b∂y​∂w∂b​=b⋆1+a⋆1=b+a=(w+1)+(x+w)=2∗w+x+1=2∗1+2+1=5​
代码上:

w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)y.backward()
print(w.grad)# output:
# tensor([5.])

叶子结点:用户创建的节点称为叶子结点,如 x 和 w。is_leaf 指示张量是否为叶子结点。设置叶子结点是为了节省内存,叶子结点的梯度会反复使用,而非叶子结点的梯度在反向传播之后就会被释放掉。如:

w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)y.backward()
print(w.grad)
print(a.grad)"""
===== output =======
tensor([5.])
None
XXXX/site-packages/torch/_tensor.py:1083: UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. Its .grad attribute won't be populated during autograd.backward(). If you indeed want the .grad field to be populated for a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor. If you access the non-leaf Tensor by mistake, make sure you access the leaf Tensor instead. See github.com/pytorch/pytorch/pull/30531 for more informations. (Triggered internally at  aten/src/ATen/core/TensorBody.h:482.)
"""

可见 The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. 也就是 a 的梯度没有保存下来。

grad_fn:记录创建该张量时所用的方法(函数)

print(y.grad_fn)
print(a.grad_fn)
print(b.grad_fn)

2 什么是动态图?

在计算图中,根据搭建方式的不同,可分为 静态图动态图

  • 动态图:运算和搭建同时进行,特点是灵活、易调节
  • 静态图:先搭建图,后运算,特点是高效但不灵活

Pytorch 是动态图!

【Torch笔记】计算图与动态图相关推荐

  1. PyTorch框架学习四——计算图与动态图机制

    PyTorch框架学习四--计算图与动态图机制 一.计算图 二.动态图与静态图 三.torch.autograd 1.torch.autograd.backward() 2.torch.autogra ...

  2. pytorch——计算图与动态图机制

    1.计算图 计算图是用来描述运算的有向无环图: 计算图有两个主要元素:结点(Node)和边(Edge): 结点表示数据,如向量.矩阵.张量,边表示运算,如加减乘除卷积等: 用计算图表示:y=(x+w) ...

  3. pytorch入门学习(四)-----计算图与动态图

    计算图: 用来描述运算的有向无环图有两个主要元素,结点note 边edge结点表示数据,如向量,矩阵,张量边表示运算,如加减乘除使用计算图主要是为了求导方便, 只需要沿着计算图的方向找到需要求导对象的 ...

  4. 基于pytorch实现图像分类——理解自动求导、计算图、静态图、动态图、pytorch入门

    1. pytorch入门 什么是PYTORCH? 这是一个基于Python的科学计算软件包,针对两组受众: 替代NumPy以使用GPU的功能 提供最大灵活性和速度的深度学习研究平台 1.1 开发环境 ...

  5. PyTorch 的 Autograd、计算图、叶子张量、inplace 操作、动态图,静态图(来自知乎)

    本博文来自:https://zhuanlan.zhihu.com/p/69294347 非常感谢此博主! PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢 ...

  6. Altium Designer 2020 学习笔记(一)-----原理图及原理图库部分(配动态图操作演示)

    本篇文章主要与大家简要分享一下,我在AD学习过程中的一些学习笔记,本篇文章主要关于原理图及原理图库部分. 本系列文章链接: -------------------------------------- ...

  7. matlab将图片旋转的代码_从零开始的matlab学习笔记——(27)图像旋转与动态图...

    matlab应用--求极限,求导,求积分,解方程,函数绘图,三维图像,拟合函数....更多内容尽在个人专栏:matlab学习 昨天思考了一下,因为笔者的GUI只是刚刚入门,如果直接说的话也说不了多少东 ...

  8. 【PyTorch 】静态图与动态图机制

    [PyTorch 学习笔记] 1.4 静态图与动态图机制 - 知乎 PyTorch 的动态图机制 PyTorch 采用的是动态图机制 (Dynamic Computational Graph),而 T ...

  9. 收藏 | 可能是最详尽的PyTorch动态图解析

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Gemfield@@知乎 来源丨https://zhu ...

最新文章

  1. php序列化中文,详解之php反序列化
  2. MFC六大核心机制之四:永久保存(串行化)
  3. SAP UI 搜索分页技术
  4. 关于ubuntu环境下gcc使用的几点说明
  5. Python ' ~ ' (取反) 操作符解释
  6. GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)
  7. gradle DSL method not found: android()
  8. 第 9 章 MybatisX 快速开发插件
  9. Android 颜色渲染(六) RadialGradient 环形渲染
  10. NYOJ276 - 比较字母大小
  11. training test validation 各有其用,实践中有了体会
  12. gcc -l:手动添加链接库
  13. msm8953平台 ADC接口配置
  14. 几个提高睡眠质量的方法。
  15. Chrome 开发者工具官方中文文档
  16. EOS源码分析(5)账号
  17. 网络路由与交换技术常见命令1(Cisco)
  18. es6之扩展运算符 Object.assign和 三个点(...)
  19. Integer和int详解
  20. 论文笔记——扩散卷积循环神经网络进行交通预测

热门文章

  1. win10怎么启用网络发现,网络发现已关闭怎么办
  2. 拉格朗日插值python代码_Python实现的拉格朗日插值法示例
  3. 随手记录JAVA微信扫码支付模式二功能
  4. pythonturtle画小白兔_竟用Python画一只兔子?——turtle库circle()画圆函数的详细用法介绍...
  5. 沪深交易所的连续竞价机制
  6. 最好用的免费视频播放器iina mac中文版
  7. Java实现蓝桥杯方格计数
  8. 使用CSS ::marker的自定义项目符号
  9. Qt高级编程之MVC框架
  10. 2018-12-15全球区块链今日热点