动态图VS静态图
计算图:用来描述运算的有向无环图,它有两个主要元素:结点(Node)和边(Edge)。结点表示数据,如向量、矩阵、张量,而边表示运算,如加减乘除卷积等。
计算图让运算流表达简洁清晰,方便求导

上图表示的是y=(w+x)*(w+1)代表的计算图,若要计算y对w的导数,那么结合链式求导法则,就在计算图中反向从y中找到所有到w的路径,每条路径上各段的导数相乘就是该路径的偏导,最后再将所有路径获得的偏导求和即可。
叶子节点是用户创建的变量,如上图的x与w,在pytorch的实现中,为了节省内存,在梯度反向传播结束后,非叶子节点的梯度都会被释放掉。
动态图
动态图:计算图的构建和计算同时发生(define by run)这种机制由于能够实时得到中间结果的值,使得调试更加容易,同时我们将大脑中的想法转化为代码方案也变得更加容易,对于编程实现来说就更友好。
静态图:静态图意味着计算图的构建和实际计算是分开(define and run)的。在静态图中,会事先了解和定义好整个运算流,这样之后再次运行的时候就不再需要重新构建计算图了(可理解为编译),因此速度会比动态图更快,从性能上来说更加高效,但这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟,代码中的错误将难以发现,无法像动态图一样随时拿到中间计算结果。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号