2021年9月29日 星期三

機器學習筆記 : 關於 TensorFlow 2

為了充分掌握機器學習的實作工具, 決定提前熟悉 TensorFlow 2, 以下是最近閱讀下列書籍中關於 TensorFlow 2 的摘要筆記 :
  1. 精通機器學習 第二版 (碁峰, 2020)
  2. Towards TensorFlow 2.0 無痛打造 AI 模型 (博碩, 2020)
  3. Applied Neural Networks with TensorFlow 2 (Apress, 2021)
  4. Learning Deep Learning (Addison Willy, nVIDIA, 2021)
TensorFlow 是 Geoffrey HintonJeffrey Dean, 與吳恩達領導的 Google Brain 團隊在其第一代神經網路系統 DistBelief 基礎上所開發的深度學習框架, 於 2015 年開放原始碼, 更好用的 TensorFlow 2 則於 2016 發表. TensorFlow 2 是一個大幅度的改版, 主要的改進有如下四點 :
  • Eager Execution :
    在 TensorFlow 1.x 時必須定義好計算流程圖, 然後呼叫 sess.run() 執行才會得到結果, 因此屬於靜態計算圖 (static graph). TensorFlow 2.0 之後程式輸入後即可馬上執行看到結果, 不需要透過 Session 去執行, 故屬於動態計算圖 (dynamic graph).
  • More Pythonic : 
    TensorFlow 1.x 版有自己的語法, 例如迴圈要使用 tf.while_loop 而非 Python 本身的 while 敘述, 造成了額外的負擔. TensorFlow 2.0 之後可使用 @tf.function 裝飾器來直接使用 Python 語法. 
  • tf.keras : 
    在 TensorFlow 1.x 時需另外安裝 Keras 套件才能使用這個方便的積木式高階 API, 但 TensorFlow 2.0 之後 Keras 已經被整合進來成為 tf.keras 子套件.
  • tf.data :
    TensorFlow 2.0 推出 tf.data API 來統一處理資料導入事宜, 方便處理資料流. 
TensorFlow 除了豐富的函式庫外, 還包含了用來視覺化的 TensorBord, 用來將 TensorFlow 產品化的 TensorFlow Extended, 存放機器學習模型的 TensorFlow Hub (可在 GitHub 模型花園下載已預訓練好的神經網路模型), 還開闢了 YouTube 官方學習頻道, 形成了一個完整的深度學習專案開發生態系, TensorFlow 專案的開發管線 (pipeline) 如下圖所示 :




TensorFlow 具有跨平台與跨語言特性, 可在 Windows, Linux, 以及 macOS 上運行, 其 API 除了 Python 外, 還支援 R, C++, Swift, Java, Go, 以及 Javascript 等語言. 

TensorFlow 底層都是以高效的 C++ 程式碼建構的, 其核心與 Numpy 類似, 硬體上不只支援在 CPU 上以低階的 Eigen 函式庫執行張量運算, 也支援顯示卡的 GPU 或 Google 客製化的 TPU 以及分散式計算等技術來提升訓練速度. 不過 TensorFlow 只支援在輝達 (nVIDIA) CUDA 技術架構的 GPU (使用 cuDNN 函式庫), 非 nVIDIA 顯示卡 (例如樹莓派) 無法使用 GPU 加速. 


TensorFlow 2.0 將 Francois Chollet 開發的高階神經網路函式庫 Keras 整合進來成為 tf.keras, 因此在 Python 環境下安裝 TensorFlow 後已經不需要再另行安裝 Keras. 納入 Keras 讓使用者能一氣呵成, 方便且快速地建構與訓練深度學習模型. 

TensorFlow 的 Python API 如下表 :
  1. 高階深度學習 API :
    tf.estimator
    tf.keras
  2. 低階深度學習 API :
    tf.initializers
    tf.losses
    tf.metrics
    tf.nn
    tf.optimizers
    tf.train
  3. I/O 與資料前處理 API :
    tf.audio
    tf.data
    tf.feature_column
    tf.image
    tf.io
    tf.queue
  4. Autodiff API :
    tf.GradientTape
    tf.gradients()
  5. 數學 API : 
    tf.bitwise
    tf.linalg
    tf.math
    tf.random
    tf.signal
  6. 特殊資料結構 API :
    tf.lookup
    tf.nest
    tf.ragged
    tf.sets
    tf.sparse
    tf.strings
  7. 部署與優化 API :
    tf.autograph
    tf.distribute
    tf.graph_util
    tf.lite
    tf.quantization
    tf.sved_model
    tf.tpu
    tf.xla
  8. TensorBoard 視覺化 API :
    tf.summary
  9. 其他 API :
    tf,compat
    tf.config
事實上有 95% 的深度學習專案只需要高階 API 中的 tf.keras 與 tf.data 即可完全處理掉, 如果需要更大的彈性, 可以使用低階的 Python API 來直接處理張量. 

安裝 TensorFlow 指令如下 :

sudo pip3 install tensorflow                (CPU 版)
sudo pip3 install tensorflow-gpu        (GPU 版)

此為 Linux 上的指令, 在 Windows 只要去掉 sudo 即可. 在 macOS 上安裝 TensorFlow 需有 Xcode 9.2 版以上才行 (但 macOS 目前不支援 GPU 版 TensorFlow). 

參考 :


其實更方便的 TensorFlow 執行環境是 Google Colab, 完全不需要安裝任何套件或購買價格不斐的顯示卡, 可選擇是否要使用 GPU/TPU 來加速, 參考 :


沒有留言 :