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