点击关注我哦
一篇文章带你了解动态图和静态图的区别和优劣
但凡我们接触深度学习框架,肯定都会听过“计算图”这个概念,如果有具体使用过某个框架,可以知道计算图又可以分为:静态图和动态图。深度学习最大的区别也在于此:使用不同的计算图进行构造和运行。
静态图意味着我们只需要定义一个计算图,然后对其进行编译,在后续过程中不断使用它。而动态图则相反,由于并没有预先定义,即在每次使用时建立,程序按照我们编写命令的顺序进行执行。
静态图以TensorFlow为例,我们在模型运行前定义一个静态图,至此,所有和外部的通信都是通过tf.Session()对象和tf.Placeholder占位符执行的,其中tf.Seesion用来开启会话,tf.Placeholder是在运行时外部数据传入的占位符张量。
鉴于静态图的这种构建机制,从理论上讲,容易在图上对其进行优化,因此其运算效率会比较高。
动态图以Pytorch为例,事情就变得比较动态化:我们可以随时定义、更改和执行代码,而不需要特殊的会话窗口和占位符。并且该框架和Python语言紧密结合,省出了额度学习成本,用起来会感觉比TensorFlow更为原生和友好。
动态图的构造原理使得调试过程变得更为容易,也能更直观地设计,因此比较方便我们将自己的想法快速进行复现,可以说是学术“利器”。
借用网络上一个小伙伴的有趣比喻,假如我们让TensorFlow和Pytorch分别造一座房子:
TensorFlow会先将造房子的流程预演一遍,设计好流程图,看下都需要什么资源,提前规划好什么时候需要做什么,最后找到一个可以建造这种房子的工程队。最后把上面那些全部交给工程队搞定。
Pytorch会先将造房子分成几个项目,每一个项目相互独立。等到开始建造房子的时候,写一个TODO list把需要做的事情安装所需顺序串起来,然后分别去执行每个项目。
注:很多网络模型可能使用动态图或者静态图更为友好,读者可以根据自己的网络结构恰当选择。
我们用一张表格对其进行比较:
大家如果在Pytorch的学习过程中有什么疑问,也可以后台留言告诉小蓝~有时间会给大家一一回复~
· END ·
RECOMMEND
推荐阅读