首页 > 编程语言 >计算图架构原理与算法分析

计算图架构原理与算法分析

时间:2023-10-29 09:03:32浏览次数:26  
标签:架构 tensor 导数 传播 算法 计算 原理 grad 节点

计算图架构原理与算法分析

这些节点和主题的图表,以及它们的连接方式,经常被称为计算图。

计算图的可视化,可以帮助我们了解有哪些节点,以及它们如何互相沟通。
ROS提供了一个工具,叫做rqt_graph,可以显示系统的计算图。

计算图管道-RFC

SOC硬件通常包括多个异构芯片组,例如Xilinx Ultra96板包括Mali Gpu、Ultrascale+Fpga、Arm A53和Arm R5,目前TVM解决方案可以支持异构硬件串行运行,但为了达到最佳性能,需要一种在多个异构硬件中并行运行计算图的解决方案。

#管道如何工作

#Imagination Technologies的管道工作原理

已经在Graph Runtime中实现了流水线执行。这允许TVM运行时多次推断单个网络。推理之间共享记忆。我们有一个异构平台,包含4个设备加速器(nna)、计算(nnpu)、GPU和一个CPU。TVM编译器根据这些设备的功能对网络进行分区,Graph Runtime以流水线方式执行它们。这允许并行执行网络的某些部分。由于设备的数量是已知的,我们已经使用软件线程为每个设备创建了执行队列。运行时根据输入缓冲区和设备的可用性在执行队列中推送一个节点(打包函数)。

计算图的简介

    计算图Computational Graph,被定义为有向图,其中节点对应于数学运算。 计算图是表达和评估数学表达式的一种方式。是一种描述方程的“语言”。既然是图,则有节点(变量),边(操作(简单函数))

      反向传播通过使用计算图形在Tensorflow,Torch,Theano等深度学习框架中实现。 更为重要的是,理解计算图上的反向传播结合了几种不同的算法及其变体,如通过时间反向传播和共享权重反向传播。一切转换成计算图,它们仍然是相同的算法 - 只是在计算图上反向传播。

       其中,TensorFlow是一个通过计算图的形式来表述计算的编程系统。基于TensorFlow这个编程系统中的每一个计算都是计算图上的一个节点,而节点与节点之间的连线则代表计算之间的依赖关系。

(1)、计算图,可以直观地把握计算过程。

(2)、计算图的节点是由局部计算构成的。局部计算构成全局计算。

(3)、在神经网络算法中,计算图的正向传播进行一般的计算。通过计算图的反向传播,可以计算各个节点的导数。

CG的优点:

优点1:局部计算。无论全局是多么复杂的计算,都可以通过局部计算使各个节点致力于简单的计算,从而简化问题。

优点2:利用计算图可以将中间的计算结果全部保存起来(比如,计算进行到2 个苹果时的金额是200 日元、加上消费税之前的金额650 日元等)。但是只有这些理由可能还无法令人信服。

优点3:实际上,使用计算图最大的原因是,可以通过反向传播高效计算导数。

CG应用:

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%,请计算支付金额。

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理解

 

pytorch compute graph 计算图 例子

例1

从例1、2中可以发现 使用

y =torch.tensor(x * x, requires_grad=True)

1

跟使用

 

y =x*x

1

效果不一样

 

x = torch.tensor(0.3, requires_grad=True)

print(x)

y =torch.tensor(x * x, requires_grad=True)

print(y)

z = 2 * y

print(z)

 

z.backward()

 

print('x grad: ',x.grad)

print('y grad: ',y.grad)

输出1

tensor(0.3000, requires_grad=True)

tensor(0.0900, requires_grad=True)

tensor(0.1800, grad_fn=<MulBackward0>)

x grad:  None

y grad:  tensor(2.)

例2

x = torch.tensor(0.3, requires_grad=True)

print(x)

y =x * x

print(y)

z = 2 * y

print(z)

 

z.backward()

 

print('x grad: ',x.grad)

print('y grad: ',y.grad)

输出2

tensor(0.3000, requires_grad=True)

tensor(0.0900, grad_fn=<MulBackward0>)

tensor(0.1800, grad_fn=<MulBackward0>)

x grad:  tensor(1.2000)

y grad:  None

 

标签:架构,tensor,导数,传播,算法,计算,原理,grad,节点
From: https://www.cnblogs.com/wujianming-110117/p/17795416.html

相关文章

  • 从Mysql架构看一条查询sql的执行过程
    1.通信协议我们的程序或者工具要操作数据库,第一步要做什么事情?跟数据库建立连接。首先,MySQL必须要运行一个服务,监听默认的3306端口。在我们开发系统跟第三方对接的时候,必须要弄清楚的有两件事。第一个就是通信协议,比如我们是用HTTP还是WebService还是TCP?第二个是消息格......
  • AJAX学习(四)-(axios核心的原理)
    一、Promise1.定义Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值我们用一张图来清晰的看Promise位于哪里2.好处1.逻辑更清晰2.了解axios函数内部运作机制3.能解决回调函数地狱问题3.使用语法及步骤示例代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • 软考系列(系统架构师)- 2010年系统架构师软考案例分析考点
    试题一软件系统架构选择【问题1】(7分)在实际的软件项目开发中,采用恰当的架构风格是项目成功的保证。请用200字以内的文字说明什么是软件架构风格,并对主程序-子程序和管道-过滤器这两种架构风格的特点进行描述。软件架构风格是描述特定软件系统组织方式的惯用模式。组织方式描......
  • Proxy Facade 设计模式运行时的工作原理介绍
    ProxyFacade设计模式是一个强大的工具,它可以帮助我们创建一个简单的代理外观类,以便根据方法和属性的配置来访问系统的各种功能。在这篇文章中,我们将深入探讨ProxyFacade模式的运行时工作原理,并提供一些实际示例来帮助您更好地理解。什么是ProxyFacade设计模式?ProxyFaca......
  • 1、Keepalived原理使用
    keepalived是一个类似于layer3,4&5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web......
  • Java Hotspot G1 GC 原理
    目录原理概念初始堆占用情况标记RememberSet原理CardTableCollectSet停顿预测模型G1的垃圾回收过程对象分配线程本地分配缓冲区Eden区中分配Humongous区分配堆内存结构传统的GC收集器G1收集器G1垃圾收集周期YoungGCYoungGC总结MixedGC全局并发标记初始标记根区域扫描......
  • 基于图像识别的自动驾驶汽车障碍物检测与避障算法研究
    基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。障碍物检测障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数据中识别出所有可......
  • 软考系列(系统架构师)- 2011年系统架构师软考案例分析考点
    试题一软件架构(质量属性效用树、架构风险、敏感点、权衡点)【问题2】(13分)在架构评估过程中,需要正确识别系统的架构风险、敏感点和权衡点,并进行合理的架构决策。请用300字以内的文字给出系统架构风险、敏感点和权衡点的隹义,并从题干(a)~(m)中各选出1个对系统架构风险、敏感点和......
  • 抓住重点的思考能力如何训练,批判性思维和金字塔原理
    读教科书感觉有点晦涩,阅读英文文章有时候不能抓住重点,感觉需要训练自己这方面的能力,多看看纸质书。其实我觉得我和别人交流的时候,有那种答非所问的倾向,说明我不善于抓住重点。当然一方面是因为我可能要忽略那些我不想回答的东西,另一方面就是思考能力的缺乏了为什么有人思考问题......
  • 数据结构与算法(LeetCode) 第二节 链表结构、栈、队列、递归行为、哈希表和有序表
    一、链表结构1.单向链表节点结构publicclassNode{ publicintvalue;publicNodenext;publicNode(intdata){value=data;}}2.双向链表节点结构publicclassDoubleNode{publicintvalue;publicDoubleNodelast;publicDouble......