Keras 是基于 Python 的深度學習庫,不同于其他深度學習框架。Keras充當神經網絡的高級 API 規范。它既可作為用戶界面,也可擴展它在其中運行的其他深度學習框架后端的功能。
Keras 起初是作為學術界熱門 Theano 框架的簡化前端。此后,Keras API 成為了 Google TensorFlow 的一部分。Keras 正式支持 Microsoft Cognitive Toolkit (CNTK)、Deeplearning4J,不久之后還將支持 Apache MXNet。
鑒于獲得了廣泛的支持,Keras 作為框架間遷移工具的地位已不可撼動。開發人員不僅可以移植深度學習神經網絡算法和模型,還可以移植預先訓練的網絡和權重。
關于 Keras
Keras名稱的起源Chollet 創建了 Keras 作為開放式神經電子智能機器人操作系統 (ONEIROS) 機器人研究項目的神經網絡的 API。ONEIROS這一名稱是對古希臘史詩《奧德賽》的致意,在這部史詩中,神話人物Oneiroi(Oneiros的單數形式)為人類指明了兩條進入夢境的路:一條路穿過宏偉的象牙之門進入噩夢,另一條路則穿過低矮的獸角之門,最終呈現一片神圣的景象。Keras 在希臘語中意為角,這個名稱非常合適,因為 Keras API 旨在為與神經網絡協同使用提供一條捷徑。
Keras 是開源 Python 包,由麻省理工學院 (MIT) 許可發行,由 Fran?ois Chollet、Google、Microsoft 和其他貢獻者共同持有該軟件的部分版權。
Keras 前端支持在研究中快速構建神經網絡模型的原型。此 API 易于學習和使用,并且具有易于在框架間移植模型的附加優勢。
由于 Keras 的獨立性,使用時無需與運行它的后端框架進行交互。Keras 具有自己的圖形數據結構,用于定義計算圖形:它不依靠底層后端框架的圖形數據結構。此方法使您可以免于學習對后端框架進行編程,正因如此,Google 已選擇將 Keras API 添加到其 TensorFlow 核心。
本文將概述 Keras,包括此框架的優勢、支持的平臺、安裝注意事項以及支持的后端。
Keras 的優勢
為何要使用 Keras?它具有多種優勢,包括:
更加良好的深度學習應用程序用戶體驗 (UX)。Keras API 對用戶友好。此 API 經過精心設計、面向對象且靈活易用,因而改善了用戶體驗。研究人員無需使用可能十分復雜的后端即可定義全新深度學習模型,從而實現了更簡潔明了的代碼。
無縫 Python 集成。Keras 是本機 Python 包,能夠輕松訪問整個 Python 數據科學生態系統。例如,Python Scikit-learn API 也可以使用 Keras 模型。熟悉后端(如 TensorFlow)的開發人員同樣可以使用 Python 來擴展 Keras。
大型的可移植工作主體和強大的知識庫。目前,研究人員已將 Keras 與 Theano 后端結合使用了一段時間。由此產生了大型工作主體和強大的社區知識庫,可供深度學習開發人員輕松地從 Theano 后端移植到 TensorFlow 后端。甚至還可以在后端之間移植權重,這意味著經過預先訓練的模型只需稍作調整就可輕松切換后端。Keras 和 Theano 研究仍與 TensorFlow 和其他后端緊密相關。此外,Keras 還免費提供了許多學習資源、文檔和代碼樣本。
Keras 應用程序
借助擬合生成器、數據預處理和實時數據擴充等 Keras 功能,開發人員只需少量訓練數據集便可訓練出強大的圖像分類器。Keras 隨附預先經過訓練的內置圖像分類器模型,包括:Inception-ResNet-v2、Inception-v3、MobileNet、ResNet-50、VGG16、VGG19和Xception。
注:由于這些模型的來源各不相同,因此有若干不同的許可證用于控制這些模型的權重使用情況。
借助 Keras,只需幾行代碼即可定義復雜模型。Keras 尤其適合用于通過小型訓練數據集來訓練卷積神經網絡。雖然 Keras 在圖像分類應用程序中已獲得了更廣泛的使用,它同樣也適用于文本和語音的自然語言處理 (NLP) 應用程序。
哪些平臺支持 Keras?
支持 Python 開發環境的平臺同時也能支持 Keras。正式構建測試是在 Python V2.7x 和 V3.5 上運行的,但與 Keras 結合使用的后端需要特定平臺才能訪問支持的圖形處理單元 (GPU)。大部分后端取決于其他軟件,例如,NVIDIA? CUDA? 工具包和 CUDA 深度神經網絡庫 (cuDNN)。
TensorFlow 是 Keras 的缺省后端,但它還支持 Theano 和 CNTK 后端。Apache MXNet 的支持工作還在進行當中,同時也為 Keras 提供了 R 接口。許多供應商都已將 Keras API 移植到其深度學習產品中,由此而能夠導入 Keras 模型。例如,基于 Java? 的后端 Eclipse Deeplearning4j,便能夠導入 Keras 模型。此外,Scala 包裝器也可用于 Keras。因此,Keras 平臺支持成為了一個爭議點。更重要的是確保目標平臺支持您所選的 Keras 后端。
有關哪些平臺支持 TensorFlow 的更多信息,請參閱TensorFlow 入門。有關哪些平臺支持 Theano 的詳細信息,請閱讀Theano 文檔。有關哪些平臺支持 CNTK 的更多信息,請參閱CNTK 文檔。
可選依賴關系
Keras 通過使用開源 Hierarchical Data Format 5 (HDF5) 二進制格式來管理數據。因此,它需要使用 HDF5 及其 h5py Python 包裝器,才能將 Keras 模型保存至磁盤。Keras 通過使用開源 GraphViz DOT 格式來繪制圖形。因此,它需要使用 GraphViz 及其 pydot Python 包裝器,才能直觀顯示數據。Keras GPU 支持還需要使用 cuDNN 庫。
從源代碼構建 Keras
由于 Keras 是一個純 Python 包,因此沒有理由從源代碼進行構建。Keras 不含任何特定于平臺的后端代碼。強烈建議改為從 Python Package Index (PyPI) 安裝 Keras。
Keras 安裝注意事項
上文中已提到,Keras 可在支持 Python 開發環境的任何平臺上運行。這足以訓練和測試大部分簡單示例和教程。大部分專家強烈建議,針對研究或商業開發等應用程序使用高性能計算 (HPC) 平臺。
由于 Keras 使用第三方后端,因此無任何安裝注意事項。后端將負責執行硬件加速。總之,安裝 Keras 后端的開發人員應考慮以下因素和選項:
處理器和內存需求
虛擬機選項
Docker 安裝選項
云安裝選項
處理器和內存需求
深度學習算法為計算密集型算法,至少需要一個具有矢量擴展的快速多核 CPU。此外,一個或多個支持高端 CUDA 的 GPU 卡是深度學習環境的標配。
深度學習進程通過使用共享內存中的緩沖區相互進行通信。因此,分配的內存應已足夠。大部分專家由此還建議采用較大的 CPU 和 GPU RAM,因為從性能和能源使用的角度來看,內存傳輸非常昂貴。更大的 RAM 可避免這些操作。
虛擬機選項
用于深度學習的虛擬機 (VM) 目前最適合有許多核心的以 CPU 為中心的硬件。因為主機操作系統控制著物理 GPU,所以在 VM 上實現 GPU 加速很復雜。主要有兩種方法:
GPU 直通:
僅適用于 1 類管理程序,比如 Citrix Xen、VMware ESXi、Kernel Virtual Machine 和 IBM? Power?。
基于 CPU、芯片集、管理程序和操作系統的特定組合,直通方法的開銷可能會有所不同。通常,對于最新一代的硬件,開銷要低得多。
一種給定的管理程序-操作系統組合僅支持特定的 NVIDIA GPU 卡。
GPU 虛擬化:
各大主要 GPU 供應商均支持,包括 NVIDIA GRID?、AMD MxGPU 和 Intel? Graphics Virtualization Technology。
最新版本在特定的較新 GPU 上支持開放計算語言 (OpenCL)。在大部分主要后端(包括 TensorFlow)上,不存在正式的 OpenCL 支持。
最新版的 NVIDIA GRID 可以在特定的較新 GPU 上支持 CUDA 和 OpenCL。
Docker 安裝選項
在 Docker 容器或 Kubernetes 集群中運行 Keras 存在諸多優勢。Keras 存儲庫包含一個 Docker 文件,具有針對 Mac OS X 和 Ubuntu 的 CUDA 支持。此映像支持 Theano 或 TensorFlow 后端。使用 Docker 的優勢主要在于,后端可以訪問物理 GPU 核心(設備)并在其中運行。
云安裝選項
在云服務上運行 Keras 時有許多選項。Keras 可用于在一個供應商生態系統上訓練模型,但只需稍作調整即可在另一個供應商生態系統上用于生產部署。
IBM Cloud?數據科學和數據管理為 Python 環境提供了 Jupyter Notebook 和 Spark。Keras 和 TensorFlow 已預先安裝。IBM Cloud 上的 Kubernetes 集群可運行 Keras 和 TensorFlow Docker 映像。
Google Cloud:Google 提供了一些機器實例,它們能訪問特定區域的 1、4 或 8 個 NVIDIA GPU 設備。同時還可以在容器化的 GPU 支持的 Jupyter Notebook 上運行 Keras 和 TensorFlow
Amazon Web Services:Amazon 提供了 Amazon Web Services 深度學習 Amazon Machine Image (AMI),以及可選的 NVIDIA GPU 支持,后者能在各種各樣的 Amazon Elastic Compute Cloud 實例上運行。已預先安裝 Keras、TensorFlow 和其他深度學習框架。AMI 可以支持多達 64 個 CPU 核心和多達 8 個 NVIDIA GPU (K80)。
Microsoft Azure:您可以在 Microsoft 數據科學虛擬機系列的 Microsoft Azure 機器實例上以 CNTK 后端安裝 Keras,僅使用 CPU 或者包含最多四個 K80 GPU 都可。
將 Keras 用作其他框架的 API
Keras 各層及模型均與純 TensorFlow 張量完全兼容;因此,Keras 為 TensorFlow 提供了良好的模型定義附件。您甚至可以同時使用 Keras 和其他 TensorFlow 庫。Keras 現已成為 TensorFlow 核心的正式組成部分。有關詳細信息,請閱讀此博客文章。
從 TensorFlow 后端切換至其他某個正式支持的 Keras 后端十分簡單,只需在 JavaScript 對象表示法 (JSON) 配置文件中進行一項更改即可。有關詳細信息,請參閱Keras 文檔。
目前,可以使用 Keras 作為以下這些框架的 API:
Keras 與 Theano。最近淘汰的 Theano 是 Keras 最先支持的后端,后被 TensorFlow 所取代。TensorFlow 支持大部分 Theano 開發的 Keras 模型。要使用 GPU 運行 Theano 后端,請遵循此文檔中有關 Theano 的部分來操作。
Keras 與 CNTK。Keras 對 Microsoft Cognitive Toolkit (CNTK) 后端的支持仍處于測試階段。您可以閱讀Microsoft 文檔,了解更多詳細信息和資料。
Keras 與 Deeplearning4j。Deeplearing4j 可使用其deeplearing4j-modelimport模塊來導入大部分 Keras 模型。目前,Deeplearning4j 可支持導入有關層次、損失、激活、初始化程序、正則化項、約束條件、度量標準和優化程序的模型信息。有關更多信息,請訪問Deeplearning4j 文檔。
Keras 與 Apache MXNet。Keras 對 Apache MXNet 后端的支持仍處于早期測試階段。這是由 Distributed (Deep) Machine Learning Community 主導的工作。此后端正逐步變為另一個正式支持的 Keras 后端。此GitHub 存儲庫中提供了該后端的代碼。
結束語
Keras 不同于其他深度學習框架。按照設計,它旨在成為神經網絡建模的 API 規范。它可作為用戶界面,也可擴展它在其中運行的其他深度學習框架后端的功能。
Keras API 已成為 Google TensorFlow 的一部分。Keras 同時還正式支持 CNTK、Deeplearning4j,很快就會支持 Apache MXNet。
由于這一廣泛的支持,Keras 已成為了實現框架間遷移的實際工具。開發人員不僅可以移植深度學習神經網絡算法和模型,還可以移植預先訓練的網絡和權重。
-
python
+關注
關注
56文章
4807瀏覽量
85040 -
深度學習
+關注
關注
73文章
5515瀏覽量
121552 -
keras
+關注
關注
2文章
20瀏覽量
6096
原文標題:Keras 入門
文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論