[人工智能-深度学习-6]:数据流图与正向传播动态图与静态图
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[人工智能-深度学习-6]:数据流图与正向传播动态图与静态图相关的知识,希望对你有一定的参考价值。
作者主页:文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:[人工智能-深度学习-6]:数据流图与正向传播_文火冰糖(王文兵)的博客-CSDN博客
目录
第1章 数据流图
1.1 什么是数据流图
数据流图(Data Flow Diagram):简称DFD。
它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
1.2 数据流图的组成元素
数据流图主要的组成元素有以下几个:
(1)数据节点:代表参与运算的数据
- 叶子节点:源输入数据
- 中间节点:中间数据
- 根节点:输出数据
(2)运算加工
是对数据进行处理的单元,接收一定的数据输入,然后对其进行处理,再进行系统输出。
- 简单的算术运算
- 各种算术运算的组合
- 复杂的函数
(3)数据存储:对数据的存储
可以代表文件,数据库等系统元素。
1.3 数据流
数据流:是数据在系统传播的路径,是有一些固定的数据组合而成。
传播的过程,就是对数据进行加工处理的过程。
- 数据流的方向性:从其实输入到输出的单向流动
- 数据流的并发性:多个数据流可以同时并发处理、同时流动
- 数据流的合并性:多个数据流可以合并成一个数据流
- 数据流的分流性:一个数据流可以分离成多个并发的之流
1.4 正向传播forward
正向传播,又称为前向传播,是数据流被处理、被加工、自身流动的过程 。
1.5 正向传播算法
正向传播算法:就是对数据进行正向传播过程中,对数据的处理、加工的数学运算。
第2章 常见的数据表达方式
2.1 标量scale
标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,而没有方向,部分有正负之分。物理学中,标量(或作纯量)指在坐标变换下保持不变的物理量。用通俗的说法,标量是只有大小,没有方向的量。
2.2 张量Tensor
张量对标量的进一步泛化,是有方向的多维数据。
[人工智能-深度学习-3]:张量tensor是数组Aarry和矩阵Matrix的泛化_文火冰糖(王文兵)的博客-CSDN博客
2.3 变量Variable
(1)传统的逻辑编程中的变量
变量来源于数学,在C/C++/Jave/python等计算机编程语言表示能储存计算结果或能表示值的抽象概念,是一个可以读写的存储单元。
变量可以通过变量名访问,变量值通常是可变的;
(2)深度学习中的变量
变量Variable是一种特殊的张量,专门用于表达神经元的权重W和偏置值B,是在普通张量的基础之上增加了一个新的特征属性:
- 求变量的偏导数
第3章 正向传播的实现方式
3.1 一元函数运算的正向传播
一元函数是指函数方程式中只包含一个自变量。例如y=F(x).
如:y = wx + b
3.2 多元函数运算的正向传播
设D为一个非空的n 元有序数组的集合, f为某一确定的对应规则。若对于每一个有序数组 ( x1,x2,…,xn)∈D,通过对应规则f,都有唯一确定的实数y与之对应,则称对应规则f为定义在D上的n元函数。
记为y=f(x1,x2,…,xn) 其中 ( x1,x2,…,xn)∈D。 变量x1,x2,…,xn称为自变量,y称为因变量。
如:f(x1,x2, x3) = w1*x1 + w2(x2 + w3*x3 + b
3.3 一元函数线性运算的正向传播
y0= a0
y1 = a1 * x1^1
y2 = a2 * x2^2
.....
y = a0 + a1 * x^1 + a2 * x^2 + ..... an * x^n
3.4 多元函数线性运算的正向传播
y1 = w1*x1 ; x1为自变量,y1为因变量
y2 = w2*x2 ; x2为自变量,y2为因变量
y3 = w3*x3 ; x3为自变量,y3为因变量
y = y1 + y2 + y3 = w1*x1 + w2(x2 + w3*x3 + b
3.5 复合运算的正向传播
v(x) = w*x + b
f(v) =
第4章 数据流图的类型
数据流图有静态图和动态图两种。其主要区别在于其存活的生命周期。
在上图中,输入样本参数和权重参数W,B都称为叶子节点。
其他节点,如a和b,都是中间节点。
4.1 静态图(tensorflow为代表)
静态图先说明数据要怎么计算,然后再放入数据。
假设要放入50组数据,运算图因为是事先构建的,所以每一次计算梯度都很快、高效;
Tensorflow采用静态图的方式:
叶子节点和中间节点的内存空间都是预留好的,在执行一轮反向传播后,这些图中的非叶子节点的参数是不释放的,为后续迭代保留。
4.2 动态图(pytorch为代表)
动态图的运算图是在数据计算的同时构建的。
假设要放入50组数据,那么就要生成50次运算图。
这样就没有那么高效。所以称为动态图。
Pytorch采用动态图的方式。
叶子节点内存空间都是预留好的,但非叶子节点是动态分配的,在执行一轮反向传播后,这些图中的非叶子节点的参数需要释放的,后续迭代时需要重选构建图,即重新执行y=f(x),这种动图的方式,牺牲了一定的执行效率,换来了内存空间使用的高效。
动态图虽然没有那么高效,但是他的优点有以下:
- 更容易调试。
- 动态计算更适用于自然语言处理。(这个可能是因为自然语言处理的输入往往不定长?)
- 动态图更面向对象编程,我们会感觉更加自然。
以上是关于[人工智能-深度学习-6]:数据流图与正向传播动态图与静态图的主要内容,如果未能解决你的问题,请参考以下文章