三種Javascript深度學習框架介紹

  • 2019 年 11 月 20 日
  • 筆記

談到機器學習,我們腦海首先蹦出的程式語言是什麼?一定是python。其實除了python,Javascript也是不錯的選擇。都說現在是大前端時代,從移動開發、伺服器端,甚至桌面軟體開發(比如大名鼎鼎的VS Code),都有Javascript的身影。

用Javascript寫機器學習應用,當然不會從頭開始手寫機器學習演算法和模型,通常會藉助現有框架。我之前接觸的都是TensorFlow.js,其實除了TFJS,還有其它的深度學習框架。下面就介紹三種常用的Javascript深度學習框架。

TensorFlow.js

Tensorflow.js是業界的大哥大,Google出品,值得信賴。其實TensorFlow.js發布得很晚,到2017年中期才公開發布第一個beta版本,其前身是Deeplearn.js。不過TensorFlow.js是第一個在瀏覽器中提供硬體加速的開源深度學習框架,它利用了WebGL進行加速。

在瀏覽器中的機器學習,用戶可以直接在瀏覽器中提供數據,進行實時訓練學習,而不用額外安裝軟體。TensorFlow.js也無需用單獨的深度學習框架構建離線的模型,隨著瀏覽器對硬體能力的支援度越來越高(比如攝影機、麥克風等),我們可以在瀏覽器中運行越來越豐富的機器學習應用。

關於TensorFlow.js的更多介紹,請參考我之前寫的文章:

  • TensorFlow.js簡介

WebDNN

WebDNN是由東京大學的機器智慧實驗室開發的,雖然它沒有TensorFlow.js那麼流行,但是它支援更多種類的深度學習框架:

  • TensorFlow
  • Keras
  • PyTorch
  • Chainer
  • Caffe

如果你已經有了這些深度學習框架的模型,你可以用WebDNN很容易地導入這些模型。WebDNN有一個優化器管道,它看似一個編譯器,將一個訓練模型轉換為一個WebDNN的中間表示的格式。在WebDNN優化中間表達之後,優化過的模型生成一個核操作圖,如下圖所示:

WebDNN也能通過WebGL進行硬體加速,如果你的瀏覽器支援WebAssembly和WebGPU,還可以通過這些API加速。

TensorFlow.js和WebDNN的主要不同在於WebDNN只支援任務的推斷階段,而不能用在訓練階段。因此除了WebDNN,你還要熟悉前面介紹的幾種深度學習框架之一。我們可以將WebDNN看做一個優化器,它能讓預訓練的模型在瀏覽器上運行得更快。

你可以使用pip安裝WebDNN:

$ pip install webdnn

Keras.js

Keras.js只支援Keras生成的模型,但因為Keras本身支援多種深度學習框架後端,所以Keras.js間接支援Keras支援的深度學習框架後端,比如Tensorflow、CNTK、MXNet等。

像TensorFlow.js一樣,Keras.js實現各種核函數。Keras.js同樣不支援模型訓練,所以你需要為Keras.js準備預訓練模型來創建應用。

Keras.js可以運行在獨立於主執行緒外的WebWorker,這可以避免阻塞渲染UI,對於提升良好的用戶體驗至關重要。

Keras.js提供很多使用的例子,你可以訪問:https://github.com/transcranial/keras-js.git 了解更多。

小結

三種Javascript深度模型框架之中,TensorFlow.js無疑是最流行的框架,無論是從功能、社區支援還是活躍度上,都碾壓其它兩個。但其它兩個也各有特點,支援的後端框架更多,支援更多的模型類型,更容易和已有的資源整合。重要的是哪種工具適合哪類問題,深度學習框架還很年輕、不成熟,希望在看完這篇文章之後,可以幫助你更好的選擇深度學習框架。