【AI60問】Q40AI深度學習開發工具有哪些?

by 提拔我園丁
緯育TibaMe AI小教室-Q40AI深度學習開發工具有哪些?

當我們開始進入深度學習世界時,最常會想知道的就是,到底要挑選哪一種框架來入門?

有如圖40-1和表格40-1顯示,目前在最大的開源社群Github上,可已找到20種星星數超過一千的深度學習框架,包含:TensorFlow、Keras、Caffe、PyTorch、CNTK、MXNet、DL4J、Theano、Torch7、Caffe2、Paddle、DSSTNE、tiny-dnn、Chainer、neon、ONNX、BigDL、DyNet、brainstorm、CoreML…等。

而排名第一的TensorFlow更有將近10萬個星星,可以得知,深度學習受到大家關注當選擇深度框架時,我們能從以下幾個面向來考慮,將分別介紹以下六個面向。

*星星排名:在 GitHub 上,有越多星星、和分支的項目,表示有越多的開發者選擇這個深度學習框架。星星就類似按讚數、收藏數。

圖40-1 常見深度學習框架(圖片來源:OmniXRI整理製作)

1、程式語言

第一步,開發時所使用的程式語言。

  • C++:要執行「訓練」及「推論」效率較好
  • Python:上手容易、支援性強,從圖40-2中可看出有將近四分之三的框架都支援 Python
  • Java:習慣使用,大概只有TensorFlow、DL4J和MXNet這三個可選擇
  • OpenCL或Nvidia的CUDA/cuDNN:改善底層效率,可考慮的硬體

【相關課程】快速闖關 Python 語法世界,程式實作不頭痛

目前有一些框架(如TensorFlow、Caffe等)底層是C++,應用層API是用Python,這類框架能取得不錯的開發及執行效率。

圖40-2 深度學習框架比較表(圖片來源:OmniXRI整理製作,廖庭儀重製;統計日期:2018/05/02)

2、執行平台

接著,要考慮可執行的作業系統及硬體(CPU、GPU)平台。

目前大多數的框架都是在Linux CPU+GPU的環境下執行,部份有支援單機多CPU(多執行緒)或多GPU協同計算以加速執行時間,像TensorFlow、CNTK、DL4J、MXNet…等框架還有支援叢集(Cluster)運算。

許多雲端服務商(Google、Amazon、Microsoft…等)都採取這類組合,方便佈署開發好的應用程式。

另外,也有些非主流的框架(如:tiny-dnn)只支援CPU而不支援GPU,這類框架的好處就是移植性較強,但工作效率很差,較適合小型系統。

  • Windows:英特爾(Intel)的BigDL 、微軟(Microsoft)的CNTK
  • Macbook:使用CoreML
  • Linux/Windows/Mac/Android:Google的TensorFlow,成為開源排行榜第一名

3、模型支援

目前常見的深度學習模型有四種,包含:監督型(如CNN)、時序型(如RNN/LSTM)、增強學習(如Q-Learning)、轉移學習、對抗生成(GAN)等,但不是每個框架都能全部支援。

【相關課程】輕鬆讓你一手掌握資料科學實作 10 大技巧

舉個例子:老牌的Caffe適合做監督型學習,但對於時序型學習就不太合適,遇到對抗生成模型時就更使不上力。

*Caffe:第一個主流的工業級深度學習工具。
它於2013年底開啟,由 UC Berkely的Yangqing Jia老師編寫和維護
能實現卷積神經網路。在計算機視覺領域Caffe依然是熱門的工具包。
有很多擴充套件,但有一些遺留的架構問題,
不夠靈活且對遞迴網路和語言建模的支援很差。

4、框架轉換

當遇到需要串接不同平台或框架時,則要考慮選用具有提供跨框架功能。

目前有三大陣營:

  • Keras:支援TensorFlow、Theano、MXNet、DL4J、CNTK,
  • 微軟和Facebook聯盟推出ONNX:可支援Caffe2、CNTK、PyTorch
  • Google的TensorFlow:未加入聯盟

另外,雖然框架之間可以轉換,但不代表轉換後的執行效率會和直接使用某個框架一樣好,此時只能依實際需求來取捨是否拿彈性換取效能。

5、社群支援

最後,要考慮選用的框架社群是否活躍、是否很久沒有維護/升級,甚至被預告即將淘汰。

像Theano雖然功能強大也有很多人在用,但目前確定已不再更新版本。

另外,對於英文不好的朋友,選用框架的社群討論區、文字教程、操作影片…等是否有中文支援也是很重要的,以免遇到問題無法求救。

6、六種主流深度學習框架的活躍度

而對準備入門深度學習的人來說,深度學習框架在 GitHub上的活躍度可以作為一個重要的參考指標。

總之,在 2019年的GitHub上各個主流深度學習框架的活躍度,以及它們對程式語言和系統的支援情況,如下圖40-3所顯示。

以下將針對這六個主流深度學習框架,做近一步的說明。

圖40-3 主流深度學習框架的活躍度 (來源:TW511教學網)

1、TensorFlow

Google開源的第二代深度學習技術,被使用在Google搜尋、影像辨識、郵件的深度學習框架。它是將複雜的數據結構,傳輸至人工智慧神經網中進行分析和處理過程的系統。

RNN(遞迴神經網路)API和實現,使用向量運算的符號圖方法,讓新網路的指定變得簡單,支援快速開發。

特點:

  • Tensor(張量)指N維數組,Flow(流)則是基於數據流圖的計算,TensorFlow是張量從圖像的一端流動到另一端的計算過程
  • TensorFlow 表達高層次的機器學習計算,使用於:語音識別、圖像識別…等多項機器深度學習領域
  • 比起第一代深度學習基礎架構DistBelief,Tensor進行各方面改進,可在不同設備上運行,如:智慧型手機、數千台數據中心伺服器
  • TensorFlow 完全開源

缺點:

  • 速度慢,比起Torch記憶體佔用大

【相關課程】提升 AI 實作能力必備,深度學習 TensorFlow 基礎與應用

2、Keras

Keras 是一個簡約的、高度模塊化的神經網絡庫,是基於Theano的一個深度學習框架、設計參考Torch、用Python語言編寫。主要是讓使用者進行最快速的原本實驗,把想法轉為結果的這個過程最短。

特點:

  • 使用簡單、快速實現原理
  • 支援卷積網絡和遞歸網絡,及兩者組合
  • 支持GPU和CPU
  • 支持任意連接方式,包括多輸入、多輸出訓練
  • 模組簡潔易懂、可配置、可隨意插拔, 基本上沒有任何使用限制

Keras庫與其他採用Theano庫的差異是:
編碼風格簡約、清晰。它把所有的要點使用小類封裝起來,很容易組合,並創造出全新模型。

【相關課程】提升 AI 實作能力必備,深度學習 TensorFlow 基礎與應用

3、PyTorch

Facebook強力推薦,目前已有十多年,是一個廣泛支持機器學習算法的深度學習框架。

主要開發語言是C和Lua,具有較好的靈活性和速度,它實現並且優化了基本的計算單元,使用者可以很簡單地在此基礎上實現演算法,不用浪費精力在計算優化上面。核心的計算單元使用C或者cuda做了很好的優化,在此基礎之上,使用lua構建了常見的模型。

特點:

  • 具有強大的n維數組
  • 具有豐富的索引、切片和transposing的歷程
  • 通過LuaJIT的C接口
  • 線性代數例程
  • 基於能量的神經網絡模型
  • 數值優化例程
  • 支持快速高效的GPU
  • 可移植嵌入到iOS、Android和FGPA平台

缺點:

  • 介面為lua語言,需要一點時間來學習

4、MXNet

MXNet是一個輕量化分布式可移植的深度學習計算平台,它支持多機多節點、多GPU的計算。

它讓使用者可以混合使用符號程式設計模式和指令式程式設計模式來做最大化效率和靈活性,目前是AWS官方推薦的深度學習框架。

它是各個框架中率先支援多 GPU 和分散式的,同時其分散式效能也非常高。

openMP+MPI/SSH+Cuda/Cudnn的框架的計算速度很快,且能夠與分布式文件系統結合,實現大數據的深度學習。MXNet支持從單機到多GPU.多集群的計算能力。

特點:

  • 基於賦值表達式建立計算圖
  • 支持內存管理,並對兩個不交叉的變量重複使用同一內存空間
  • 使用C++實現,並提供C風格的頭文件
  • 支援非常多的語言封裝,如:C 、Python、R、Julia、Scala、Go、MATLAB 和 JavaScript
  • 支援Torch
  • 支援移動設備端發布

5、CNTK

CNTK ( Computational Network Toolkit) 是微軟研究院開源的深度學習框架,用於搭建深度神經網路的計算,目前已經發展成通用、跨平台的深度學習系統,在Github開源。

  • 有一套極度優化的運行系統,來訓練和測試神經網絡,它以抽象的計算圖形式構建的
  • 支持CPU和GPU模型
  • 支持兩種方式來定義網絡:一種是使用「Simple Network Builder」,通過設置少量參數,就能生成一個的標準神經網絡;另一種是使用網絡定義語言(NDL)
  • 支持各種前饋網路,如:MLP、CNN、RNN、LSTM、Sequence-to-Sequence 模型,也支援自動求解梯度
  • 比Caffe、Theano、TensoFlow…等主流工具性能更強、靈活性更好、可擴展性更高

6、Theano

Theano產生於2008年,是在加拿大魁北克的蒙特婁大學Lisa Lab團隊開發並維護,是一個高效能的符號計算及深度學習庫,開發的基於Python的深度學習框架。核心是一個數學表示式的編譯器,專門為處理大規模神經網路訓練的計算而設計。

特點:

  • 專門用於定義、優化、求值數學表達式,其效率高,適用於多維數組
  • 獲取用戶數據結構
  • 使之成為一個使用Numpy、高效本地庫的非常高效的代碼,並能在CPU或GPU上儘可能快地運行

想成為爬蟲工程師 、資料分析師 、資料工程師 、資料分析領域專家 、人工智慧產品經理嗎?還是你的公司正需要培養此領域人才呢?

點我了解 AI資料科學家-三階段全方位學程班 👉 https://www.tibame.com/eventpage/ai_datascientist 

每日5分鐘, 提拔我園丁陪你快速添補AI/資料科學知識與技能。

若想了解更多AI/資料科學的小知識、及各產業的相關應用,歡迎訂閱TibaMe FB及部落格,或有其他想了解的主題歡迎在下方留言讓我們知道唷!

參考資料

分享這篇文章:
0 comment
4

您也許會喜歡

Leave a Comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料