DL之CG:Computational Graph计算图的简介、入门、使用之详细攻略

目录

计算图的简介

计算图的入门

CG与局部计算

计算图的使用


计算图的简介

计算图Computational Graph,被定义为有向图,其中节点对应于数学运算。 计算图是表达和评估数学表达式的一种方式。是一种描述方程的“语言”。既然是图,则有节点(变量),边(操作(简单函数))
      反向传播通过使用计算图形在Tensorflow,Torch,Theano等深度学习框架中实现。 更为重要的是,理解计算图上的反向传播结合了几种不同的算法及其变体,如通过时间反向传播和共享权重反向传播。一切转换成计算图,它们仍然是相同的算法 - 只是在计算图上反向传播。
       其中,TensorFlow是一个通过计算图的形式来表述计算的编程系统。基于TensorFlow这个编程系统中的每一个计算都是计算图上的一个节点,而节点与节点之间的连线则代表计算之间的依赖关系。
(1)、计算图,可以直观地把握计算过程。
(2)、计算图的节点是由局部计算构成的。局部计算构成全局计算。
(3)、在神经网络算法中,计算图的正向传播进行一般的计算。通过计算图的反向传播,可以计算各个节点的导数。

CG的优点:[1],

  • 优点1:局部计算。无论全局是多么复杂的计算,都可以通过局部计算使各个节点致力于简单的计算,从而简化问题。
  • 优点2:利用计算图可以将中间的计算结果全部保存起来(比如,计算进行到2 个苹果时的金额是200 日元、加上消费税之前的金额650 日元等)。但是只有这些理由可能还无法令人信服。
  • 优点3:实际上,使用计算图最大的原因是,可以通过反向传播高效计算导数。

CG应用:[1],
1、利用计算图来理解神经网络的反向传播思路。
        假设我们想知道苹果价格的上涨会在多大程度上影响最终的支付金额,即求“支付金额关于苹果的价格的导数”。设苹果的价格为x,支付金额为L,则相当于求dL/dx。这个导数的值表示当苹果的价格稍微上涨时,支付金额会增加多少。
        “支付金额关于苹果的价格的导数”的值可以通过计算图的反向传播求出来。可以通过计算图的反向传播求导数。

可知,计算图的优点是,可以通过正向传播和反向传播高效地计算各个变量的导数值。传递这个局部导数的原理,是基于链式法则(chain rule)。
DL:深度学习神经网络算法中的相关概念(链式法则等)简介、使用之详细攻略

2、计算图的反向传播:沿着与正方向相反的方向,乘上局部导数。

如图所示,反向传播的计算顺序是,将信号E乘以节点的局部导数dy/dx,然后将结果传递给下一个节点。这里所说的局部导数是指正向传播中y = f(x) 的导数,也就是y 关于x的导数dy/dx。比如,假设y = f(x) = x^2,则局部导数为= 2x。把这个局部导数乘以上游传过来的值(即E),然后传递给前面的节点。

计算图的入门

0、基本思路

  • (1). 构建计算图。
  • (2). 在计算图上,从左向右进行计算。正向传播是从计算图出发点到结束点的传播。既然有正向传播这个名称,当然也可以考虑反向(从图上看的话,就是从右向左)的传播。实际上,这种传播称为反向传播(backward propagation)。反向传
    播将在导数计算中发挥重要作用。

1、将数学公式 g = ( x + y ) ∗ z 转为计算图理解

2、太郎在超市买了2 个100 日元一个的苹果,消费税是10%,请计算支付金额。[1]

3、太郎在超市买了2 个苹果、3 个橘子。其中,苹果每个100 日元,橘子每个150 日元。消费税是10%,请计算支付金额。[1]

CG与局部计算

计算图的特征是可以通过传递“局部计算”获得最终结果。“局部”这个词的意思是“与自己相关的某个小范围”。局部计算是指,无论全局发生了什么,都能只根据与自己相关的信息输出接下来的结果。
      计算图可以集中精力于局部计算。无论全局的计算有多么复杂,各个步骤所要做的就是对象节点的局部计算。虽然局部计算非常简单,但是通过传递它的计算结果,可以获得全局的复杂计算的结果。
1、在超市买了2 个苹果和其他很多东西。

计算图的使用

0、使用TensorFlow的过程中,通常需要定义两个阶段

  • 阶段1:定义计算图中所有的计算
  • 阶段2:执行计算

定义计算阶段的Demo:下边的代码中,TensorFlow会自动将定义的计算a和b转化为计算图中的节点。在TensorFlow中,系统会自动维护一个默认的计算图,通过tf.get_default_graph函数可以获取当前默认的计算图。除了使用默认的计算图,TensorFlow支持通过tf.Graph函数来生成新的计算图。

import tensorflow as tf
a = tf.constant([1.0,2.0], name='a')
b = tf.constant([3.0,4.0], name='b')
result = a + b

1、backpropagation 算法用CG理解

参考文章
[1]《深度入门-基python的理论与实现》

DL之CG:Computational Graph计算图的简介、入门、使用之详细攻略相关推荐

  1. DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释)、案例应用之详细攻略

    DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释).案例应用之详细攻略 相关文章:DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类 ...

  2. DL之self-attention:self-attention自注意力机制的简介、应用之详细攻略

    DL之self-attention:self-attention自注意力机制的简介.应用之详细攻略 目录 self-attention的简介 1.self-attention的影响 2.self-at ...

  3. DL之DNN优化技术:DNN中参数初始化【Lecun参数初始化、He参数初始化和Xavier参数初始化】的简介、使用方法详细攻略

    DL之DNN优化技术:DNN中参数初始化[Lecun参数初始化.He参数初始化和Xavier参数初始化]的简介.使用方法详细攻略 导读:现在有很多学者认为,随着BN层的提出,权重初始化可能已不再那么紧 ...

  4. DL之Attention:Attention注意力机制的简介、应用领域之详细攻略

    DL之Attention:Attention注意力机制的简介.应用领域之详细攻略 目录 Attention的简介 1.Why Attention? 2.Attention机制的分类 3.Attenti ...

  5. TF之data_format:data_format中的NHWCNCHW简介、转换的详细攻略

    TF之data_format:data_format中的NHWC&NCHW简介.转换的详细攻略 目录 NHWC&NCHW简介 NHWC&NCHW转换 NHWC&NCHW ...

  6. NLP:自然语言处理技术近十年发展技术更迭的简介、案例之详细攻略(持续更新)

    NLP:自然语言处理技术近十年发展技术更迭的简介.案例之详细攻略(持续更新) 目录 自然语言处理技术近十年发展技术更迭的简介.案例

  7. Computer:路由器、交换机、猫Modem的简介、区别之详细攻略

    Computer:路由器.交换机.猫Modem的简介.区别之详细攻略 目录 路由器.交换机的简介 交换机 路由器 猫Modem 外置式Modem的软件安装 外置式Modem的硬件安装 路由器.交换机. ...

  8. Dataset:机器学习和深度学习中对数据集进行高级绘图(数据集可视化,箱线图等)的简介、应用之详细攻略——daidingdaiding

    Dataset:机器学习和深度学习中对数据集进行高级绘图(数据集可视化,箱线图等)的简介.应用之详细攻略--daidingdaiding 目录 箱线图 箱线图 箱线图(box plots):这些图显示 ...

  9. Py之Numpy:Numpy库中常用函数的简介、应用之详细攻略

    Py之Numpy:Numpy库中常用函数的简介.应用之详细攻略 目录 Numpy库中常用函数的简介.应用 1.X, Y = np.meshgrid(X, Y) 相关文章 Py之Numpy:Numpy库 ...

最新文章

  1. 工业4.0的十大关键词
  2. Linux字符模式下的“远程桌面共享”及屏幕录制
  3. pytorch torch.norm(input, p=2) → float、torch.norm(input, p, dim, out=None) → Tensor(求范数)
  4. redission收发命令流程分析
  5. Roadblocks(次短路经)
  6. 分分钟甩Word几条街,Python编辑公式竟可以如此简单,你都知道吗?
  7. 制作首页的显示列表(2017.11.29)
  8. 【数据结构的魅力】002.单向、双向链表栈和队列递归
  9. 67. 查询分页数据(2)
  10. mysql5.7登陆时access denied解决办法
  11. 什么是 IP 冲突以及如何解决?
  12. 超级表格全新升级,这些功能你不可能在其他软件上看到
  13. Win10环境下caffe安装与编译
  14. Rust语言正在兴起,Java、Python、C的末日来临?
  15. 关于编码问题的复制黏贴
  16. VMware是什么?
  17. RLS算法到卡尔曼滤波 II
  18. java 线程管理_Java提供的线程池来创建多线程,进一步优化线程管理。
  19. 解决vue重复点击路由报错问题:Uncaught (in promise) NavigationDuplicated
  20. 8月近况——少吃饭,多想事(总结)

热门文章

  1. swift添加下拉刷新_React Native自定义下拉刷新组件
  2. VDD VCC VSS VEE分别代表什么
  3. HTML基础-第二讲
  4. RMAN深入解析之--控制文件
  5. mysql server-存储引擎
  6. 集群与存储 LVS的集群
  7. asp开发中存储过程应用全接触 _asp技巧
  8. 基于数据挖掘的旅游推荐APP(三):热门景点模块
  9. python脚本在命令行中传递参数(附字符查找小案例)
  10. 在vim粘贴系统剪切板里的内容