计算图

概念

计算图是用来描述运算的有向无环图,有两个主要元素:结点和边。
结点表示数据,如向量,矩阵,张量
边表示运算,如加减乘除卷积等
image.png

采用计算图描述运算的好处不仅是让运算看起来更加简洁,同时更便于梯度求导。
image.pngimage.png
其实就是在计算图上找到y到w的所有路径,然后将梯度相加。

叶子节点

用户创建的结点称为叶子结点,如X与W
设置叶子节点的意义主要为了节省内存,因为当反向传播结束后,会释放非叶子节点的梯度。如果想要查看非叶子结点的梯度可以在反向传播前对非叶子节点使用retain_grad()方法,如a.retain_grad()

grad_fn
记录创建该张量时所使用的方法(函数)
例如: y.grad_fn =
a.grad_fn =
b.grad_fn =
记录的意义是在求梯度的时候根据创建的方法来计算。例如y由a和b相乘得到,就用乘法求导公式来计算。

Pytorch的动态图机制

动态图 vs 静态图

根据计算图搭建方式,可将计算图分为动态图和静态图。

动态图:运算与搭建同时进行; 特点:灵活,易调节
静态图:先搭建图,后运算; 特点:高效,不灵活

举例:Tensorflow的静态图
image.png
Pytorch的动态图
计算图与动态图机制 - 图5

总结

计算图与动态图机制 - 图6