Keras是一個模型級(model-level)的庫,為開發深度學習模型提供了高層次的構建模組。它不處理張量操作、求微分等低層次的運算。相反,它依賴於一個專門的、高度最佳化的張量庫來完成這次運算,這個張量庫就是Keras的後端引擎(backend engine)。Keras沒有選擇單個張量庫並將Keras實現與這個庫繫結,而是以模組化的方式處理這個問題(見圖1)。因此,幾個不同的後端引擎都可以無縫嵌入到Keras中。目前,Keras有三個後端實現:TensorFlow後端、Theano後端和微軟認知工具包(CNTK,Microsoft cognitive toolkit)後端。未來Keras可能會擴張到支援更多的深度學習引擎。
圖1 深度學習框架
TensorFlow、Theano和CNTK是目前主流的深度學習平臺。TensorFlow由Google公司開發,Theano由Université de Montréal開發,CNTK由Microsoft開發。我們基於Keras編寫的程式碼都可以在這三個後端上直接執行,無須再進行二次修改。換句話說,我們在程式開發過程中可以自由在三個平臺之間無縫切換,在實際中,這樣做是非常有用的。因為,對於某個特定任務而言,可能某個後端的執行速度更快,這樣我們就可以直接使用它。眾所周知,TensorFlow後端之所以作為大部分深度學習的預設後端,主要原因就在於它的廣泛性和可擴充套件性。
此外,透過TensorFlow、Theano或CNTK,Keras可以在CUP和GPU上無縫執行。在CPU上執行時,TensorFlow本身封裝了一個低層次的張量運算庫Eigen;在GPU上執行時,TensorFlow封裝了一個高度最佳化的深度學習運算庫NVIDIA CUDA。
(本文部分內容來自《Deep Learning with Python》,Francois Chollet著,張亮譯)