几乎所有的深度学习框架都是基于计算图的,计算图分为动态计算图和静态计算图。
静态计算图先定义再进行运行,一次定义多次运行,而动态计算题是在运算过程中被定义,在运行的时候构建。可以多次构建,多次运行。
静态计算图一旦创建就不能修改,定义的时候使用特殊的语法,就像学习一门新的语言,意味着无法使用if,while等语句。
动态计算图,可以使用python的if,while等条件,最终的计算图取决于你执行的条件分支。
动态图的思想直接明了,更符合人的思考过程,动态图的方式使得我们可以任意修改前向传播,还可以查看变量的值。
如果说静态图框架好比C++,每次运行都编译才行(session.run),那么动态图框架就是python,动态执行,可以修改。
动态图带来的另一个优势是,调试更加容易,pytorch代码报错的地方,往往就是代码写错的地方。而静态图根据代码生成图对象,然后在session.run()时报错,这种错几乎很难找到相应的代码。