自動微分是機器學習工具包的必備工具,可以自動計算整個計算圖的微分。
PyTorch內置了壹個名為torch.autograd的自動微分引擎,這個引擎支持的數據類型有:浮點張量類型(half、float、double和b float 16)和復數張量類型(cfloat、cdouble)。
PyTorch中常用的與自動微分相關的張量性質和函數;
TensorFlow通過tf自動跟蹤計算微分。GradientTape API,翻譯成差分磁帶。磁帶有點歷史上磁帶機的味道,就是所有的計算和計算結果都記錄在磁帶上。
Tf。GradientTape是在tf上計算的。變量而不是tf。張量,因為在張量流中,tf。張量是壹個不變的對象,tf。變量是可變對象;Tf。變量通常用於存儲模型參數。
Tf。變量有壹個可訓練的屬性。張量沒有,類似PyTorch張量的requires_grad,也就是告訴自動微分引擎是否跟蹤tf。變量並自動計算tf.Variable的微分。
示例:
從上面可以看出,TensorFlow的自動微分和PyTorch有很大區別,參數和參數的微信沒有封裝成壹個對象,非常人性化,或者說封裝的很差!
為了方便地實現模型、模型參數和模型參數的區分,TensorFlow提供了另壹套機制:關於壹個模型的梯度,這意味著TensorFlow開發團隊也知道如何用tf實現模型參數。變量,然後通過tape.gradient()方法計算微分。tf。變量及其對應的differential是分離的,沒有封裝,對開發者不友好。所以TensorFlow開發者團隊對構建模型的基礎類:tf不感興趣。模塊或其子類(層。層,克拉斯。Model)提供了壹個Module.trainable _ variables的屬性,封裝了所有的模型參數,使用方便。然而,相應的差異仍然沒有封裝,堅持自己的個性...對於我們開發者來說,還是選擇跟隨。...
示例:
參考資料: