Pytorch:計算圖與動態圖機制


計算圖

computational graph

表示方法

計算圖是用來描述運算的有向無環圖

計算圖有兩個主要元素:結點(node)和邊(edge)

結點表示數據,如向量,矩陣,張量

邊表示運算,如加減乘除卷積等

 

計算圖不僅使計算顯得簡潔,更重要的是其表示梯度求導更為方便

用計算圖表示y=(x+w)*(w+1):     令 a=x+w    b=w+1     則y=a*b

梯度求導結合題例的算式和計算圖表示

                 

從上述的計算圖表示中,可以看到,除了x,w外的梯度都是可以用x,w或其xw梯度表示

 

葉子結點

葉子結點:用戶創建的結點稱為葉子結點,如x,w

torch.tensor.is_leaf:用來查看是否為葉子結點

葉子結點的用處:在反向傳播之后,只有葉子結點的梯度會被保留,其他中間結點的梯度數據會被釋放,以節省內存

若要保存某特定結點的梯度,可以在運行反向傳播函數前,補上一句tensor.retain_grad(),此次反向傳播后,該tensor的梯度會被保留

 

梯度方向

torch.tensor.grad_fn:記錄創建該張量時所用的方法(函數)及梯度方向

作用:以便計算機知道求導某張量結點的梯度需用到的特定法則

          

AddBackward代表a張量為相加形成,此時的梯度在反向傳播中

 

動態圖

dynamic graph

動態圖與靜態圖

根據計算圖的搭建方式,可以將計算圖分為動態圖和靜態圖。

  • 動態圖采用搭建和運算同時進行:靈活、易調節(debug)
  • 靜態圖為先搭建,后運算:高效但不靈活

pytorch采用動態圖機制,tensorflow采用靜態圖機制

如下左圖,tensorflow的搭建機制為先確立好所有的路線流向,再將tensor數據注入跑通整個過程。這也是tensorflow的名字由來

而下右圖,pytorch中隨着代碼的數據定義與構建,同時也確立部分的計算圖模塊。

            

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM