iT邦幫忙

5

TensorFlow 學習地圖

前言

TensorFlow 在2.x版進行大幅度的改版,並且納入Keras後,整體的架構變得更加完整易用,但也造成學習路徑的多樣化,筆者整理一些K書心得分享如下。

網路資源

TensorFlow 2.x版預設執行模式已改為 Eager Execution Mode,與1.x版的靜態運算圖(Computational Graph)完全不相容,1.x版必須包在session中執行,因此,在目前網路中仍充斥許多套件或範例屬於1.x版,雖然,可以利用下列方式更改預設執行模式為1.x版,但筆者建議就斷捨離了,因為,不會有未來性了。

if tf.__version__[0] != '1':           # 是否為 TensorFlow 1.x版
    import tensorflow.compat.v1 as tf  # 改變載入套件的命名空間(Namespace)
    tf.disable_v2_behavior()           # 使 2.x 版功能失效(Disable)

TensorFlow目前改版仍非常頻繁,且許多類別/函數常常會變更命名空間或規格,因此,參考文件還是應以TensorFlow官網為主,也可以參考Keras官網,它也已改成介紹TensorFlow為主,而非本身開發的Keras套件,筆者比較喜歡Keras官網的編排,但注意有些範例程式是以TensorFlow預覽版(Night build)為基礎,若執行出錯,應考慮是否為TensorFlow版本的問題。

另外,TensorFlow官網主要有兩個頁籤『教學』(Tutorial)與『指南』(Guide),建議讀者先從『指南』入門,而非『教學』,『教學』其實是針對影像/文字/音訊作主題式的介紹。

學習路徑

TensorFlow官網或Keras官網教學並沒有明顯的學習路徑(Roadmap)指引,兩個官網及大部分書籍都是從下列程式開始介紹。

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

不明就裡的讀者可能就已以為從此處出發,開始研究各式神經網路,例如CNN、RNN等,對此筆者並不贊同,上述程式只是要展示TensorFlow的威力強大與易用姓,短短10幾行,就能準確辨識手寫阿拉伯數字,但是,並沒有說明神經網路是如何求解的,因此,筆者建議還是應該從『梯度下降法』開始瞭解優化求解的步驟與原理,如下圖:
https://ithelp.ithome.com.tw/upload/images/20210816/200019767CbJ2oM0Yd.png

其中:

  1. 正向傳導:藉由『張量』(Tensor)計算誤差及損失函數。
  2. 反向傳導:透過『偏微分』計算梯度,同時,利用『梯度下降法』尋找最佳解。

因此,建議應該從基礎到進階,逐步理解神經網路設計的原理,順序如下:

  1. 張量(Tensor)運算:包括向量、矩陣的運算。
  2. 自動微分(Automatic Differentiation):梯度計算、梯度下降優化求解(Optimization),不管是TensorFlow或PyTorch都一樣,透過自動微分功能,神經網路才能找到最佳解。
  3. 各式神經層:包括完全連接層(Dense)、卷積(Conv1D、Conv2D、Conv3D)、循環神經層(RNN、LSTM、GRU)等。
  4. 神經網路:以各種神經層構建的網路模型,還包括各式的Activation Function、損失函數(Loss Function)、優化器(Optimizer)、效能衡量指標(Metrics),模型又分為順序模型(Sequential model)及Functional API。

https://ithelp.ithome.com.tw/upload/images/20210817/20001976vjMJw1cJeX.png

擴展

Keras熟悉後,再以Keras為核心,整合整個生環境的各項工具使用。
https://ithelp.ithome.com.tw/upload/images/20210817/20001976skGpIr1jtW.png

  1. TensorBoard:提供模型及訓練過程視覺化的工具,也提供除錯的功能。
  2. Callback:在訓練過程中設定Callback,可作模型存檔、訓練提前結束、TensorBoard整合…,甚至可自訂Callback,蒐集更多的訓練資訊。
  3. Dataset:Generator資料結構,可逐批讀入資料,不必一次全部載入記憶體,造成記憶體不足,適合大型資料集的專案應用,另外支援Cache、Prefetch…等效能提升的功能。
  4. Data Augmentation:結合Dataset,可提供影像資料增補的功能,包括影像偏移、旋轉、拉近/拉遠、裁切…等功能,產生更多的訓練資料,使模型更精準。
  5. Keras Applications:TensorFlow提供許多的預先訓練好的模型(pre-trained model),他們都是歷屆影像辨識大賽的冠亞軍,可以直接採用其模型與權重,也可採用部分模型。
  6. TF Hub:提供許多進階的pre-trained model,例如物件偵測等。
  7. TF Serving:提供模型佈署的指令。
  8. Estimator:暫時忘了吧

結語

以上是筆者一路追隨TensorFlow/Keras的使用經驗,若有謬誤,請大家不吝指正。

工商廣告一下:
深度學習 -- 最佳入門邁向 AI 專題實戰
https://ithelp.ithome.com.tw/upload/images/20210817/20001976mCaS636cqk.jpg


尚未有邦友留言

立即登入留言