顾名思义,动态图就是可变化的图,静态图就是不可变的图。所以很容易产生如下疑问:
- 这里的图是指什么?
- 可变不可变又是怎么实现的?各自有什么优势?
带着疑问看了些资料,简单整理了一下。
深度学习框架的“图”指的是什么?
这里的图其实指的是计算图,一种用来描述运算的有向无环图。包含两个主要元素:
- 节点(Node):节点表示数据,如向量、矩阵、张量。
- 边(Edge):边表示运算,如加减乘除卷积等。
示例:
其中,
x
,
y
,
z
,
g
x,y,z,g
x,y,z,g 分别为节点,
+
,
∗
+,*
+,∗ 为节点之间的操作,即边。
那么,动态图,也就是动态计算图又是啥东西呢?
网上资料最经典的说法:
- 动态图就是运算和搭建同时进行,每次都重新搭建计算图。
- 静态图就是搭好了就不变了,每次计算都用那个图。
总是看完了还是一脸呆滞,不论背景抛直接抛概念容易让人半知半解。
像 TensorFlow(旧版)、caffe 这些深度学习框架其实都是静态图模型,用着用着很多人就发现静态图总是还不够灵活,想在计算图中实现
i
f
,
e
l
s
e
if,else
if,else 类似的功能很困难,所以才有了动态图模型的需求。
静态图的计算过程是固定的,而动态图可以结合输入改变计算图结构,实现更复杂的功能。
所以优缺点也显而易见:
优点 | 缺点 | |
---|---|---|
动态图 | 灵活,且方便debug | 每次都要重新建图,效率低 |
静态图 | 效率高 | 不够灵活 |