张量的一系列操作,增多,导致可能出现多个操作之间的串行并行,协同不同的底层之间的协作,避免操作的冗余。计算图就是为了解决这些问题产生的。

计算图与动态图机制

1. 计算图

计算图用来描述运算的有向无环图,计算图有两个主要元素:结点Node和边Edge。

结点表示数据,如向量、矩阵、张量。

边表示运算,如加减乘除卷积、激活函数等

用计算图表示:y = (x + w)*(w+1)

a = x + w

b = w+ 1

y = a * b

从下往上进行。使用计算图的好处就是对于梯度求导比较方便

2. 计算图与梯度求导

y = (x+ w) * (w+1)

a = x+ w

b = w+1

y = a*b

\[\frac{\partial y}{\partial w}=\frac{\partial y}{\partial a}\frac{\partial a}{\partial w}+\frac{\partial y}{\partial b}\frac{\partial b}{\partial w}
\]

=b*1+a*1

=b+a

= (w+1)+(x+w)

=2*w+x+1

=2*1+2+1=5

3.叶子结点

用户创建的结点称为叶子结点,如x与 w

is_leaf:指示张量是否为叶子结点。他是整个计算图的根基

为什么要设立叶子结点,是为了节省内存,因为当程序结束后整个计算图的非叶子结点都是释放掉的

如果想使用非叶子结点的梯度,使用retain_grad(),执行这个方法就可以保留非叶子结点的梯度。

grad_fn:记录创建该张量时所用的方法(函数)在梯度传播的时候用到

比如y,y.grad_fn = <MulBackward0>y是用乘法得到的,所以在求解a和b的梯度时就会用乘法的求导法则去求解。叶子结点的grad_fn都是none

import torch
import numpy as np x = torch.tensor([2.], requires_grad=True)
w = torch.tensor([1.], requires_grad=True) a = torch.add(x,w)
a.retain_grad()
b = torch.add(w,1)
y = torch.mul(a,b)
y.backward()
# print(w.grad)
print("is_leaf:", x.is_leaf, w.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)
print("gradient",x.grad,w.grad,a.grad,b.grad,y.grad)
print("gradient_fun",x.grad_fn,w.grad_fn,a.grad_fn,b.grad_fn,y.grad_fn)
is_leaf: True True False False False
gradient tensor([2.]) tensor([5.]) tensor([2.]) None None
gradient_fun None None <AddBackward0 object at 0x00000214F45B6610> <AddBackward0 object at 0x00000214F65CC580> <MulBackward0 object at 0x00000214F65CC730>

pytorch(05)计算图的更多相关文章

  1. 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-2-autograd

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 torch.autograd就是为了方 ...

  2. 『PyTorch』第五弹_深入理解autograd_上:Variable属性方法

    在PyTorch中计算图的特点可总结如下: autograd根据用户对variable的操作构建其计算图.对变量的操作抽象为Function. 对于那些不是任何函数(Function)的输出,由用户创 ...

  3. 理解PyTorch的自动微分机制

    参考Getting Started with PyTorch Part 1: Understanding how Automatic Differentiation works 非常好的文章,讲解的非 ...

  4. pytorch 入门指南

    两类深度学习框架的优缺点 动态图(PyTorch) 计算图的进行与代码的运行时同时进行的. 静态图(Tensorflow <2.0) 自建命名体系 自建时序控制 难以介入 使用深度学习框架的优点 ...

  5. 莫烦pytorch学习笔记(二)——variable

    .简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子, ...

  6. [PyTorch入门]之从示例中学习PyTorch

    Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...

  7. PyTorch全连接ReLU网络

    PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网 ...

  8. [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上)

    [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 目录 [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 0x00 摘要 0x01 总体逻辑 0x02 废弃 ...

  9. [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)

    [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...

  10. [源码解析] PyTorch如何实现前向传播(3) --- 具体实现

    [源码解析] PyTorch如何实现前向传播(3) --- 具体实现 目录 [源码解析] PyTorch如何实现前向传播(3) --- 具体实现 0x00 摘要 0x01 计算图 1.1 图的相关类 ...

随机推荐

  1. Codeforces Round #575 (Div. 3) B. Odd Sum Segments 、C Robot Breakout

    传送门 B题题意: 给你n个数,让你把这n个数分成k个段(不能随意调动元素位置).你需要保证这k个段里面所有元素加起来的和是一个奇数.问可不可以这样划分成功.如果可以打印YES,之后打印出来是从哪里开 ...

  2. hdu5550 Game Rooms

    Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission ...

  3. NCD 2019 M. NCD Salary

    题意 :给你两个指数类型的数\(A^m\)和\(B^n\),比较他们的大小.保证底数和指数中最多只有一个为0. 题解 :题目数据非常大,肯定不能直接比较.由换底公式和\(Log\)函数的性质我们知道: ...

  4. 牛客练习赛70 A.重新排列 (,字符串思维)

    题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...

  5. Linux系统编程【3.2】——ls命令优化版和ls -l实现

    前情提要 在笔者的上一篇博客Linux系统编程[3.1]--编写ls命令中,实现了初级版的ls命令,但是与原版ls命令相比,还存在着显示格式和无颜色标记的不同.经过笔者近两天的学习,基本解决了这两个问 ...

  6. Javascript实现"点按钮出随机背景色的"三个DIV

    <!DOCTYPE html> <html> <head> <title>Random_Color-Transformation</title&g ...

  7. npm fetch All In One

    npm fetch All In One fetch for TypeScript { "compilerOptions": { "lib": ["D ...

  8. Android Studio & SDK & JDK & setting path

    Android Studio & SDK & JDK & setting path https://developer.android.com/studio/intro/upd ...

  9. js to svg flowchart

    js to svg flowchart flowchart https://flowchart.js.org/ https://github.com/adrai/flowchart.js https: ...

  10. MacBook Pro 关闭触控板

    MacBook Pro 关闭触控板 https://support.apple.com/zh-cn/HT204895 https://support.apple.com/zh-cn/HT203171 ...