「譯」Effective TensorFlow Chapter1——TensorFlow 基礎

TensorFlow 基礎

本文翻譯自: 《TensorFlow Basics》, 如有侵權請聯繫刪除,僅限於學術交流,請勿商用。如有謬誤,請聯繫指出。


TensorFlow和其他數值計算庫(如NumPy)之間最顯著的區別在於TensorFlow中的操作是基於符號運算的。這是一個強大的概念,它允許TensorFlow執行命令式庫(如NumPy)所不能做的所有事情(例如,自動區分)。但這也要付出更大的代價。在我我試圖揭秘TensorFlow,並提供一些指導方針和最佳實踐,以便更有效地使用TensorFlow。

讓我們從一個簡單的例子開始,我們要乘以兩個隨機矩陣。首先,我們看一個在NumPy完成的實施:

「譯」Effective TensorFlow Chapter1——TensorFlow 基礎

現在我們在TensorFlow中執行完全相同的計算:

「譯」Effective TensorFlow Chapter1——TensorFlow 基礎

與立即執行計算並生成結果的NumPy不同,tensorflow只向圖中表示結果的節點提供一個handle(類型為Tensor)。如果我們嘗試直接打印Z值,我們會得到這樣的結果:

Tensor("MatMul:0", shape=(10, 10), dtype=float32)

由於兩個輸入都具有完全定義的形狀,所以tensorflow能夠推斷張量的形狀及其類型。為了計算張量的值,我們需要創建一個會話並使用Session.run()方法評估它。


提示:當使用Jupyter筆記本時,請確保在定義新節點之前在開始調用tf.reset_default_graph()來清除符號圖。


為了理解符號計算有多麼強大,讓我們看看另一個例子。假設我們有來自曲線(例如f(x)=5x^2+3)的樣本,並且我們希望基於這些樣本預測f(x)。我們定義一個參數函數g(x, w) = w0 x^2 + w1 x + w2,它是輸入x和潛在參數w的函數,我們的目標是找到潛在的參數,使得g(x,w)≈f(x)。這可以通過最小化損失函數來完成:L(w) = ∑ (f(x) - g(x, w))^2.。雖然這個簡單問題有一個閉合解(a closed form solution),但我們選擇使用更通用的方法,可以應用於任意的可微函數,並且使用隨機梯度下降。我們簡單地計算L(w)相對於一組採樣點上的w的平均梯度,並沿相反方向移動。

以下是利用TensorFlow完成的代碼:

「譯」Effective TensorFlow Chapter1——TensorFlow 基礎

通過運行這段代碼,你應該看到接近這個的結果:

[4.9924135, 0.00040895029, 3.4504161]

這是我們參數的一個相對接近的近似值。

對於TensorFlow來說,這只是冰山一角。許多問題,例如優化具有數百萬參數的大型神經網絡,只需幾行代碼就可以在TensorFlow中高效實現。TensorFlow考慮到了多個設備和線程的擴展,並支持各種平臺。

最後

如果你有什麼疑問,歡迎在評論區留言。同時如果你覺得本文對你有幫助,希望可以關注並轉發,這樣我會更有動力更新的。


分享到:


相關文章: