[Tensorflow] 初學筆記 (1) Tensorflow 簡介
這系列紀錄了學習 Google Tensorflow 的歷程和一些小心得,主要是參考官方文件。
先從簡介開始吧。
什麼是 Tensorflow?
TensorFlow 是 Google 繼 2011 年開發了 DistBelief 之後,透過使用資料流 (flow) 圖像,來進行數值演算的新一代開源機器學習工具。這個機器學習工具的基礎設計,主要透過圖學裡的「節點」來表達數學運算,「邊」 來表示「節點」間的多維度資料陣列 (tensors,張量),因此命名做 TensorFlow。TensorFlow 主要由 Google 機器智慧研究室與 Google 大腦研究組 (Google Brain Team) 的學者與工程師所開發,容許開發者自由配置運算環境來做深度神經網絡研究,但也足以支持普通環境所需要的服務(例如透過影片進行圖像辨識)。
Tensorflow 的架構
Tensorflow 首先要定義類神經網路的架構,然後再把資料放進架構中去做運算。如下圖:
Tensorflow 是透過圖學的概念來運作,一開始要先建立一個 data flow,再將資料放進去。其中節點(Nodes)在圖中表示數學運算,邊(edges)則表示節點間相互聯繫的多維度資料陣列,也就是張量(tensor)。訓練模型時,tensor 會不斷從 data flow graph 中的一個節點流(flow)到另一個節點,這就是 Tensorflow 名稱的由來。
簡單的程式碼
這段來看看要怎麼用簡單的程式碼來建立一個 Tensorflow。
首先,將 tensorflow 和 numpy import 進來,numpy 是用來產生簡單的資料。
|
|
接著,用 $tf.Variable$ 來將例描述 $y$ 的參數 $W$(weights) 和 $b$(bias)。透過前面的 $y_data = x_data * 0.1 + 0.3$,我們都知道 $W$ 會是 $0.1$,而 $b$ 是 $0.3$。Tensorflow 的工作就是一步步學習、找出答案,最後將 $W$ 學成 $0.1$,$b$ 學成 $0.3$。
|
|
接著計算 $y$ 和 $y_data$ 的誤差,即 $y$ 和實際 $y_data$ 的差距。這裡的 optimizer 利用 Gradient Descent 來進行 Back Propagation。然後利用這個 optimizer 來減少誤差,提升參數的準確度,而目標就是將誤差最小化。
|
|
目前為止,只是將 Tensorflow 的架構建起來,在使用這個架構之前,必須先將之前定義的所有 Variable 初始化。
|
|
真正開始之前,還有一步,就是建立 Session,利用 Session 來執行剛剛定義的 init 初始化的步驟。
|
|
現在,就讓這個神經網路開始一步步的訓練,也就是上面定義的 train。這個訓練一樣是用 Session 來進行,Session 每 run 一次 train,optimizer 就會去減少 $y$ 和 $y_data$ 的誤差,漸漸地這個誤差會越來越小,而理論上預測的準確性也會越來越高。
|
|
這是完整的程式碼執行結果:
0 [ 0.26253623] [ 0.29924595] 20 [ 0.13903731] [ 0.27772433] 40 [ 0.1123959] [ 0.29292658] 60 [ 0.10393622] [ 0.2977539] 80 [ 0.10124992] [ 0.29928678] 100 [ 0.10039689] [ 0.29977354] 120 [ 0.10012604] [ 0.2999281] 140 [ 0.10004003] [ 0.29997718] 160 [ 0.10001272] [ 0.29999277] 180 [ 0.10000405] [ 0.29999772] 200 [ 0.10000129] [ 0.29999927]
可以看到,Weight 和 bias 經過學習之後,會慢慢地逼近 0.1 和 0.3。而這就是整個 Tensorflow 的基礎架構和基本用法。