深度学习框架 动态图 VS 静态图
不管是动态图还是静态图,他们都是计算图,计算图是描述运算的有向无环图,计算图由节点和边构成,节点表示数据,可以是矩阵、向量、张量等,边表示运算,如加减乘除卷积等。
计算图的优点
让运算流的表达更加简单。
方便求导计算梯度。
上图表示 y = (w+x)*(w+1) 的计算图,如果需要计算y对w的导数,则需要反向从y找到所有到w的路径,每条路径上利用链式求导法则计算偏导数,并将所有路径的偏导数相加就可以得到y对w的导数。
叶子节点是用户创建的变量,如上图中的w和x,在pytorch中,为了节省内存,在梯度反向传播结束后,非叶子节点的梯度会被释放掉。
动态图
动态图意味着计算图的构建和计算是同时发生的,这样就可以实时得到中间结果的值,使得调试更加容易,pytorch就是使用的动态图机制。
静态图
静态图意味着计算图的构建和实际计算是分开进行的,在静态图中,需要先定义好整个计算流,再次运行的时就不需要重新构建计算图,因此其性能更加高效,tensorflow默认使用的是静态图机制。静态图的缺点在于,运算执行的过程(编译的过程中)代码的错误不容易发现,不能像动态图一样实时拿到中间的计算结果,对代码调试带来一定的麻烦。