一、动态图的推导

(1)计算图:是用来描述运算的有向无环图

(2)计算图有两个主要元素:结点(Node)和边(Edge)

(3)结点(Node):表示数据,如向量、矩阵、张量

(4)边(Edge):表示运算,如加、减、乘、除、卷积

示例图如下:

由图可知:y=a*b,其中a=x+w,b=w+1,因此y=a*b=(x+w)(w+1),a和b充当中间变量,pytorch

在计算的时候,会把计算过程用上面的动态图存储起来,计算y关于w的导数,如下:

上试中令w=1,x=2

采用pytorch进行代码实现,其过程如下:

import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(w.grad)

输出结果:

tensor([5.])

在上图中,w和x是叶子节点,是整个计算图的根基。之所以采用叶子节点的概念,是为了角少内存,在反向传播结束之后,非叶子节点的的梯度会被释放,我们采用上述例子进行讲解:

import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(w.is_leaf,x.is_leaf,a.is_leaf,b.is_leaf,y.is_leaf)
print(w.grad,x.grad,a.grad,b.grad,y.grad)
输出:
True True False False False
tensor([5.]) tensor([2.]) None None None

可以看出只有x和w是叶子节点,同时进行反向传播之后只有叶子节点值保存下来。

二、grand_fn

     torch.tensor有一个属性grad_fn,grad_fn的作用是记录创建该张量时所用的函数,这个属性反向传播的时候会用到。例如在上面的例子中,y.grad_fn=MulBackward0,表示y是通过乘法得到的。所以求导的时候就是用乘法的求导法则。同样的,a.grad=AddBackward0表示a是通过加法得到的,使用加法:

import torch
w=torch.tensor([1.],requires_grad=True)
x=torch.tensor([2.],requires_grad=True)
a=w+x
b=w+1
y=a*b
y.backward()
print(a.grad_fn)
print(b.grad_fn)
print(y.grad_fn)
print(w.grad_fn)
输出:
<AddBackward0 object at 0x0000023590AAB320>
<AddBackward0 object at 0x0000023590AAB240>
<MulBackward0 object at 0x0000023590AAFEF0>
None

由上述可知叶子节点的.grad_fn是None。三、静态图

pytorch 动态图机制相关推荐

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

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

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

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

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

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

  4. 可能是最详尽的PyTorch动态图解析

    ↑ 点击蓝字 关注视学算法 作者丨Gemfield@@知乎 来源丨https://zhuanlan.zhihu.com/p/61765561.https://zhuanlan.zhihu.com/p/ ...

  5. 详尽 | PyTorch动态图解析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:深度学习这件小事 背景 PyTorch的动态图框架主要是 ...

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

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

  7. 一文详解pytorch的“动态图”与“自动微分”技术

    前言 众所周知,Pytorch是一个非常流行且深受好评的深度学习训练框架.这与它的两大特性"动态图"."自动微分"有非常大的关系."动态图" ...

  8. 【深度学习】村通网之——谈谈Tensorflow Eager Execution机制之静态图和动态图的区别(一)

    文章目录 前言 介绍 搭建静态图 搭建动态图 前言 随着TensorFlow 1.4 Eager Execution的出现,TensorFlow的使用出现了革命性的变化. 介绍 我很早就听说过这样一句 ...

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

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

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

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

最新文章

  1. 怎么设计一个合适的延时队列?
  2. linux 脚本判断一个目录不存在
  3. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
  4. OpenGL着色器基础
  5. win7下简单FTP服务器搭建
  6. PAT甲级题目翻译+答案 AcWing(高精度)
  7. 关情纸尾-----UIKit基础--QQ自定义布心布局
  8. HTML特殊符号/特殊字符
  9. PHP array_count_values() 函数用于统计数组中所有值出现的次数。
  10. php百度坐标转腾讯坐标,PHP腾讯与百度坐标转换
  11. 在线JSON压缩工具
  12. Java好学吗?Java能做什么?如何快速入门Java?
  13. linux waitpid子进程,关于waitpid()函数的问题,为什么最后子进程没退出来啊?...
  14. 追赶法 matlab编程,科学网—数值分析----三对角方程组的追赶法matlab程序 - 殷春武的博文...
  15. html5 cuplayer,PlayerLite免费flv与mp4网页视频播放器
  16. 合唱队形c语言编程,洛谷 P1091 合唱队形
  17. Debian旧版本下载
  18. 最大数 (Java算法每日一题)
  19. Python模糊匹配 | 刷英语六级段落匹配只需要3秒?
  20. 【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)

热门文章

  1. OCS UCCA 开发笔记(Unified Communications Client API)
  2. java day26【数据库的基本概念、MySQL数据库软件、SQL数据库的基本概念】
  3. [Windows]win10时间同步错误的解决方法
  4. 数据格式转换 (三)Office文档转HTML
  5. Java框架之Hibernate(二)
  6. JQuery杂项方法
  7. 最好用的JQuery插件集合以及组合拳
  8. 微网站|h5弹窗|手机网站 html5 弹窗、弹层、提示框、加载条
  9. HP的.NET职位面试题
  10. RabbitMQ基础--总结