必威电竞|足球世界杯竞猜平台

Keras
來源:互聯(lián)網(wǎng)

Keras是一個由Python編寫的開源人工神經(jīng)網(wǎng)絡(luò)庫,可以作為TensorFlow微軟CNTK和Theano的高階應(yīng)用程序接口,進行深度學習模型的設(shè)計、調(diào)試、評估、應(yīng)用和可視化。

基本介紹

Keras在代碼結(jié)構(gòu)上由面向?qū)ο蠓椒ň帉懀耆K化并具有可擴展性,其運行機制和說明文檔有將用戶體驗和使用難度納入考慮,并試圖簡化復雜算法的實現(xiàn)難度。Keras支持現(xiàn)代人工智能領(lǐng)域的主流算法,包括前饋結(jié)構(gòu)和遞歸結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),也可以通過封裝參與構(gòu)建統(tǒng)計學習模型。在硬件和開發(fā)環(huán)境方面,Keras支持多操作系統(tǒng)下的多GPU并行計算,可以根據(jù)后臺設(shè)置轉(zhuǎn)化為TensorFlow微軟CNTK等系統(tǒng)下的組件。

Keras的主要開發(fā)者是谷歌工程師Fran?ois Chollet,此外其GitHub項目頁面包含6名主要維護者和超過800名直接貢獻者。Keras在其正式版本公開后,除部分預編譯模型外,按MIT許可證開放源代碼。

Keras:基于Theano和TensorFlow的深度學習庫

Keras是一個高層神經(jīng)網(wǎng)絡(luò)API,Keras由純Python編寫而成并基Tensorflow、Theano以及CNTK后端。Keras 為支持快速實驗而生,能夠把你的idea迅速轉(zhuǎn)換為結(jié)果,如果你有如下需求,請選擇Keras:

??簡易和快速的原型設(shè)計(keras具有高度模塊化,極簡,和可擴充特性)

??支持CNN和RNN,或二者的結(jié)合

??無縫CPU和GPU切換

Keras適用的Python版本是:Python 2.7-3.6

Keras的設(shè)計原則是

??用戶友好:Keras是為人類而不是天頂星人設(shè)計的API。用戶的使用體驗始終是我們考慮的首要和中心內(nèi)容。Keras遵循減少認知困難的最佳實踐:Keras提供一致而簡潔的API,能夠極大減少一般應(yīng)用下用戶的工作量,同時,Keras提供清晰和具有實踐意義的bug反饋。

??模塊性:模型可理解為一個層的序列或數(shù)據(jù)的運算圖,完全可配置的模塊可以用最少的代價自由組合在一起。具體而言,網(wǎng)絡(luò)層、損失函數(shù)、優(yōu)化器、初始化策略、激活函數(shù)、正則化方法都是獨立的模塊,你可以使用它們來構(gòu)建自己的模型。

??易擴展性:添加新模塊超級容易,只需要仿照現(xiàn)有的模塊編寫新的類或函數(shù)即可。創(chuàng)建新模塊的便利性使得Keras更適合于先進的研究工作。

??與Python協(xié)作:Keras沒有單獨的模型配置文件類型(作為對比,caffe有),模型由python代碼描述,使其更緊湊和更易debug,并提供了擴展的便利性。

歷史與命名

Keras的前身是Fran?ois Chollet為ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System)項目所的編寫的代碼,在2015年分離成為開源的人工神經(jīng)網(wǎng)絡(luò)工具。Keras的最初版本以Theano為后臺,設(shè)計理念參考了Torch但完全由Python編寫??。2015年11月的Keras測試版本0.3.0,TensorFlow被加入了后臺選項。2016年4月,Keras在PIPy上發(fā)布了第一個穩(wěn)定版本1.0.0??。2017年5月,Keras版本2.0.0發(fā)布??。同年6月,Keras版本2.0.5測試性地將微軟CNTK加入后臺選項??。

自2017年起,Keras得到了Tensorflow團隊的支持,其大部分組件被整合至Tensorflow的Python API中。在2018年Tensorflow 2.0.0公開后,Keras被正式確立為Tensorflow高階API,即tf.keras??。此外自2017年7月開始,Keras也得到了CNTK 2.0的后臺支持??。

在2019年9月17日Keras穩(wěn)定版本2.3.0的更新文檔中,Keras團隊宣布了計劃調(diào)整:在該版本之后,Keras將集中于Tensoflow后臺的有關(guān)內(nèi)容,多后臺Keras的開發(fā)優(yōu)先度被降低,且更新將僅包含補丁(bug fix),不會有新的功能性內(nèi)容移植/加入??。

Keras的命名來自古希臘語“κ?ρα? (牛角)”或 “κρα?νω(實現(xiàn))”,意為將夢境化為現(xiàn)實的“牛角之門”??。由荷馬史詩《奧德賽》第19卷佩涅羅佩與奧德修斯的對話,無法挽留的夢幻擁有兩座門,一座門由牛角制成,一座門由象牙制成,象牙之門內(nèi)光彩奪目,卻僅是無法實現(xiàn)的夢境;唯有走進牛角之門,才能由夢境看見真實??。

安裝

Keras支持Python 2.7-3.6版本,且安裝前要求預裝TensorFlow、Theano、微軟CNTK中的至少一個??。其它可選的預裝模塊包括:h5py,用于將Keras模型的保存為HDF文件;cuDNN,用于GPU計算;PyDot,用于模型繪圖??。Keras可以通過PIPy、Anaconda安裝,也可從GitHub上下載源代碼安裝??:

神經(jīng)網(wǎng)絡(luò)

Keras的神經(jīng)網(wǎng)絡(luò)API是在封裝后與使用者直接進行交互的API組件,在使用時可以調(diào)用Keras的其它組件。除數(shù)據(jù)預處理外,使用者可以通過神經(jīng)網(wǎng)絡(luò)API實現(xiàn)機器學習任務(wù)中的常見操作,包括人工神經(jīng)網(wǎng)絡(luò)的構(gòu)建、編譯、學習、評估、測試等??。

屬性與方法

Keras支持序列化模型和函數(shù)化模型,且二者具有一定數(shù)量的公有屬性(attribute)和方法(method)。其中的公有屬性包括layers、inputs、outputs,能夠以Python列表的形式返回模型信息??:

Keras模型的公有方法主要與模型權(quán)重和結(jié)構(gòu)有關(guān),這里分別介紹如下:

搭建模型

序列化模型(keras.models.Sequential)

Keras的序列化模型是由其API中層對象(參考“層API”)堆疊得到的神經(jīng)網(wǎng)絡(luò)模型??。序列化模型有兩種定義方式,一種是運行keras.models.Sequential時由列表指定所有的層對象,另一種是在運行時不指定層API,而是對Sequential類使用model.add添加層對象,這里給出使用的例子:

序列模型不顯式定義輸入層,因此其第一個層對象要求指定輸入數(shù)據(jù)的大小,例子中使用了參量input_shape,也可等價地使用參量input_dim??。

函數(shù)化模型(keras.models.Model)

Keras的函數(shù)化模型也被稱為functional API,其功能是將一個張量指定為輸入,另一個張量指定為輸出,并將與輸入、輸出張量之間存在連接的節(jié)點(層對象)組合成神經(jīng)網(wǎng)絡(luò)模型??。這里提供一個函數(shù)化模型的使用例子。

相比于序列化模型,函數(shù)化模型顯示定義了隱含層的張量,因此可以更容易地搭建非序列化的模型,具有更好的可擴展性。此外,Keras的函數(shù)化模型支持自定義的子類繼承??,但在定義子類時,模型的拓撲結(jié)構(gòu)由Keras的Python代碼而不是層對象的靜態(tài)圖指定,因此一部分基于模型靜態(tài)圖的方法在子類繼承后無法使用??。

使用模型

編譯(model.complie)

Keras模型的編譯由model.compile實現(xiàn),運行時可將Keras代碼翻譯為后臺代碼以執(zhí)行學習、評估等后續(xù)操作。編譯可以指定學習組件(參考“學習與優(yōu)化API”),其使用格式如下??:

格式中各參量的含義和調(diào)用方法如下??:

除上述參量外,根據(jù)后臺的不同,model.compile也可以將其它參量和關(guān)鍵字傳遞至keras.backend.函數(shù)或tf.Session.run。

學習(model.fit、model.fit_generator)

模型編譯完成后可以使用model.fit或model.fit_generator進行學習,其使用格式如下??:

model.fit和model.fit_generator的使用格式包含一些共有的參量,其含義和調(diào)用方法如下??:

除上述共有參量外,對model.fit,其余參量的含義和調(diào)用方法如下:

對model.fit_generator,其余參量的含義和調(diào)用方法如下:

評估(model.evaluate、model.evaluate_generator)

在模型完成學習后,Keras提供model.evaluate和model.evaluate_generator進行模型評估,二者的使用格式如下??:

測試(model.predict、model.predict_generator、model.predict_on_batch)

Keras模型可以通過model.predict、model.predict_generator和model.predict_on_batch進行測試,其使用格式如下??:

這里對Keras的層API(keras.layers)進行介紹。在Keras的神經(jīng)網(wǎng)絡(luò)API中,層API創(chuàng)建的層對象被用于搭建模型??。

屬性與方法

Keras的層API包含一些共有方法,這些方法與給定層對象的結(jié)構(gòu)和權(quán)重更新有關(guān)??:

當一個層對象僅有一個節(jié)點,即沒有層對象的合并時,上述方法按屬性的形式使用??:

作為進一步說明,Keras中所有的層(子類),除輸入層外都繼承自keras.engine.base_layer.Layer類,在該類中,層的“節(jié)點”是輸入和輸出張量的連結(jié)。例如在順序連結(jié)的Keras模型中,每個層對象都只有一個節(jié)點,但包含共享輸入或輸出的層對象,例如keras.layers.concatenate按張量映射的順序,包含了多個節(jié)點??。

核心層

輸入層(keras.layers.Input)

Keras的輸入層繼承自keras.engine.input_layer,是一個后臺張量,例如tf.Tensor的實現(xiàn)。由Keras的輸入層子類創(chuàng)建層對象的方式為??:

格式中各參量的含義和調(diào)用方法如下??:

全連接層(keras.layers.Dense)

Keras內(nèi)部全連接層對象的創(chuàng)建方式為??:

格式中各參量的含義和調(diào)用方法如下??:

激活層(keras.layers.Activation)

Keras支持創(chuàng)建獨立的激活層對象,其創(chuàng)建方式為??:

格式中的activation表示一個Keras的激活函數(shù)對象、例如keras.activations.sigmoid。將激活層前置于全連接層時可以實現(xiàn)神經(jīng)網(wǎng)絡(luò)中的預激活(pre-activation)操作。激活層和全連接層中的activation參量不產(chǎn)生沖突,同時使用時會分別進行激活函數(shù)計算??。此外Keras也可以直接從層API創(chuàng)建激活層,參考“特殊激活層”。

隨機失活層

參考:隨機失活

Keras支持隨機連接失活和隨機空間失活,可用的子類包括Dropout、SpatialDropout1D、SpatialDropout2D和SpatialDropout3D,其創(chuàng)建方式為??:

格式中rate接收一個0和1之間的浮點數(shù),表示隨機失活的比率。Dropout中noise_shape表示隨機失活對張量各個維度的操作,例如對輸入張量(t,x,y),給定noise_shape=(1,x,y)時,輸入張量(x,y)維度的隨機失活在t維不變。默認值None表示完全的隨機連接失活??。

Keras中的隨機空間失活,例如SpatialDropout2D會隨機歸零整個通道,例如對4維張量(t,x,y,c),2維的隨機空間失活會隨機選擇某個c維和t維上所有的(x,y)元素歸零??。

輸出正則化層(keras.layers.ActivityRegularization)

Keras提供了獨立的輸出正則化層子類,并支持L1和L2正則化方法,其創(chuàng)建方式為??:

格式中的l1和l2接收對應(yīng)的正則化系數(shù)。輸出正則化層和全連接層中的activity_regularizer參量不產(chǎn)生沖突,使用時會分別執(zhí)行正則化操作??。

張量操作層

Keras在層API中提供了支持特定張量操作的層類。由于張量操作層所進行的操作均可以類比numpy數(shù)組中的對應(yīng)操作,因此這里僅對張量操作層進行簡單介紹??:

卷積層與池化層

參考:卷積神經(jīng)網(wǎng)絡(luò)

Keras內(nèi)置了一系列1維至3維的卷積層和池化層子類用于搭建卷積神經(jīng)網(wǎng)絡(luò),且作為特色地,加入了深度可分卷積、轉(zhuǎn)置卷積、擴張卷積等較為復雜的構(gòu)筑。另注意到,Keras中卷積層和池化層的“維度”是特征圖的維度,即一個keras的2維卷積層對象的輸入和輸出都是4維張量,通常為(樣本/批次, 特征圖第1維, 特征圖第2維, 通道)。在指定data_format時也可以為(通道, 特征圖第1維, 特征圖第2維, 樣本/批次)??。

卷積層與深度可分卷積層

Keras包含1維至3維的卷積層,以及2維和3維的深度可分卷積層子類:Conv[1-3]D、SeparableConv[1,2]D。以2維情形為例,其對象的創(chuàng)建方式為??:

格式中共有參量的含義和調(diào)用方法如下??:

SeparableConv[1,2]D中參量的含義和調(diào)用方法如下??:

極大池化、均值池化與全局池化層

Keras支持1維到3維的極大池化、均值池化和全局池化:MaxPooling[1-3]D、AveragePooling[1-3]D、GlobalMaxPooling[1-3]D、GlobalAveragePooling[1-3]D。以2維極大池化和全局極大池化為例,池化層對象的創(chuàng)建方式為??:

格式中pool_size接收一個Python元組,表示池化層感受野的大小,其余參量的調(diào)用方法與keras.layers.Conv2D相同。

轉(zhuǎn)置卷積與反池化層

Keras包含2維和3維的轉(zhuǎn)置卷積子類:Conv[2,3]DTranspose,以及1維至3維的反池化層子類:UpSampling[2,3]D。以2維情形為例,其創(chuàng)建方式為??:

Conv2DTranspose的參量的含義和調(diào)用方法如下??:

UpSampling2D中參量size表示反池化的放大系數(shù),例如一個100x100特征圖在經(jīng)過size=(2, 2)的反池化后會輸出200x200的特征圖。keras.layers.UpSampling2D中的interpolation僅對Tensorflow后臺有效,表示反池化的差值方法,默認值‘nearest’表示最接近原則插值,也可接收'bilinear'表示雙線性插值??。

裁剪和0值填充層

Keras支持創(chuàng)建2維和3維特征圖的裁剪層對象:Cropping2D、Cropping3D;以及獨立的1維至3維0值填充層對象:ZeroPadding1D、ZeroPadding2D、ZeroPadding3D,以2維情形為例,其創(chuàng)建方式分別為??:

參量cropping接收2維或3維元組,表示由特征圖邊緣向中心裁剪去除的像素個數(shù),對多維元組,其順序為((第1維左, 第1維右), (第2維左, 第2維右))以此類推。cropping也接收單個整數(shù),表示對特征圖的所有維度進行相同像素的裁剪??。參量中的padding表示特征圖各維度上0值填充的層數(shù)。

循環(huán)層與循環(huán)單元

參考:循環(huán)神經(jīng)網(wǎng)絡(luò)

Keras提供循環(huán)層和循環(huán)單元用于構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò),二者是keras.engine.base_layer.Layer類的子類,屬于層API的一部分,其中循環(huán)層是在功能上與其它層對象相當?shù)臉?gòu)筑,可以直接堆疊得到神經(jīng)網(wǎng)絡(luò)模型;循環(huán)單元是循環(huán)層內(nèi)對序列數(shù)據(jù)的每個時間步進行(系統(tǒng))狀態(tài)和輸出進行處理的模塊,一個循環(huán)層可以包含一個或多個循環(huán)單元??。

循環(huán)單元子類

Keras的循環(huán)單元子類包括簡單循環(huán)單元(SimpleRNNCell)、長短期記憶單元(LSTMCell)、門控循環(huán)單元(GRUCell),其對應(yīng)的子類實現(xiàn)方式如下:

簡單循環(huán)單元的創(chuàng)建方式為??:

格式中3類循環(huán)單元共有的參量的含義和調(diào)用方法如下??:

格式中LSTMCell和GRUCell共有的參量的含義和調(diào)用方法如下??:

對LSTMCell,unit_forget_bias是其控制遺忘門偏差量初始化的參量,默認值為True,表示將遺忘門偏差量的初始值設(shè)定為1.0。對GRUCell,reset_after=False表示在時序輸入與權(quán)重矩陣相乘后使用復位門??。此外LSTM單元有對應(yīng)的循環(huán)卷積單元子類??。

循環(huán)層子類

Keras的循環(huán)層子類包括一個可接收任意循環(huán)單元的子類:keras.layers.RNN,和預設(shè)了特定循環(huán)單元的子類:SimpleRNN、GRU、LSTM、LSTM2D??。不是一般性這里只對通用的子類進行介紹:

格式中參量的含義和調(diào)用方法如下??:

預設(shè)了特定循環(huán)單元的循環(huán)層子類包含了keras.layers.RNN的所有參量,以及對應(yīng)循環(huán)單元的參量。

層間合并

Keras提供了8個層子類用于隱含層的合并,按對應(yīng)的張量操作方式包括:加Add、減Subtract、乘Multiply、取均值A(chǔ)verage、取極大值/極小值Maximum/Minimum、拼接Concatenate、點乘Dot。當上述子類的名稱為全小寫時,即add、multiply等,表示該子類的函數(shù)化接口??。

層間合并子類的輸入為一個列表,列表內(nèi)按順序包含需要合并的張量,這里對張量的拼接給出一個例子:

自定義層

Keras可以使用自定義的層對象搭建模型,具體地,一個自定義層子類必須包含3個特定方法,其含義介紹如下??:

其它子類

除上述子類外,keras的層API還包含一些其它子類,這里將其列出并簡要介紹:

學習與優(yōu)化

優(yōu)化器

Keras內(nèi)置了7個可在反向傳播算法框架內(nèi)使用的優(yōu)化器(keras.optimizers),這些優(yōu)化器按keras.optimizers.Optimizer的子類進行封裝,這里對優(yōu)化器的名稱和實現(xiàn)進行介紹??:

優(yōu)化器包含共用參數(shù),其中l(wèi)r表示學習速率,接收大于0的浮點數(shù)、decay表示學習速率隨紀元的遞減,默認值為0,表示學習速率無遞減、epsilon表示最小常數(shù),默認值為keras.backend.epsilon。其余參數(shù)為各優(yōu)化器可選的超參數(shù)??。

表格中優(yōu)化器可以按關(guān)鍵字調(diào)用,關(guān)鍵字為小寫的子類名稱,例如keras.optimizers.Adam的關(guān)鍵字為'adam'。按關(guān)鍵字調(diào)用優(yōu)化器時,其超參數(shù)取默認值??。

初始化器

Keras的初始化器子類(keras.initializers)提供了在創(chuàng)建層對象(時需要指定的權(quán)重初始化方法??。所有的Keras初始化器都繼承自keras.initializers.Initializer,通過對Initializer進行子類繼承,也可以自定義初始化器。這里列出Keras可用的所有初始化器:

正則化器

正則化器(keras.regularizers)類提供了神經(jīng)網(wǎng)絡(luò)學習的正則化操作,即在計算損失函數(shù)時考慮該層權(quán)重的范數(shù)。Keras的正則化器繼承自keras.regularizers.Regularizer類,包括L1正則化、L2正則化和兩者的線性疊加,共3個子類??:keras.regularizers.l1、l2、l1l2。注意到,正則化器中的正則化系數(shù),是正則化項(而非經(jīng)驗風險項)相乘的系數(shù)。

參數(shù)限制器

Keras中參數(shù)限制器(keras.constraints)類的功能是將神經(jīng)網(wǎng)絡(luò)權(quán)重的取值限定在一個范圍內(nèi),防止神經(jīng)網(wǎng)絡(luò)在學習過程中出現(xiàn)個別高權(quán)重節(jié)點控制整體輸出的情形出現(xiàn);在特定問題下可使神經(jīng)網(wǎng)絡(luò)僅包含非負權(quán)重??。keras.constraints包含4個預設(shè)子類:MaxNorm、NonNeg、UnitNorm、MinMaxNorm,功能分別為限制權(quán)重極大值、限制負權(quán)重、權(quán)重(范數(shù))歸一化、權(quán)重0-1標準化??。

回調(diào)函數(shù)

Keras的回調(diào)函數(shù)(keras.callbacks)是一個特殊的類,其功能是在模型的學習過程中按條件觸發(fā)給定的操作。Keras的回調(diào)函數(shù)預置了12個子類,也支持用戶自定義的子類繼承。一般地,回調(diào)函數(shù)對象在按列表的形式組織后可以在Keras神經(jīng)網(wǎng)絡(luò)API中進行調(diào)用:

記錄與監(jiān)控工具

Keras的內(nèi)置回調(diào)函數(shù)中包含了一系列可用于記錄和監(jiān)控模型行為的子類:BaseLogger、CSVLogger、ProgbarLogger、History、RemoteMonitor、TensorBoard。其中BaseLogger和History在模型學習時會默認加載,其余的回調(diào)函數(shù)為可選加載。

檢查點

ModelCheckpoint可以在模型學習的迭代過程中對模型進行備份,其對象的創(chuàng)建方式如下:

動態(tài)調(diào)參和早停工具

Keras的內(nèi)置回調(diào)函數(shù)包含了動態(tài)調(diào)整學習參數(shù)和進行學習終止判定的子類,包括LearningRateScheduler、ReduceLROnPlateau、TerminateOnNaN、EarlyStopping,其中前2個子類用于調(diào)節(jié)優(yōu)化器的學習速率(參考“優(yōu)化器”),后2個子類分別為異常值終止和早停法。上述對象的創(chuàng)建方式如下:

自定義回饋器

使用者可以通過在LambdaCallback中指定操作或?qū)allback進行子類繼承創(chuàng)建自定義的回調(diào)函數(shù)。對第1種選擇,LambdaCallback對象的創(chuàng)建方法為:

這里LambdaCallback的使用方法類似于Python中的匿名函數(shù),格式中的6個參數(shù)表示在學習的不同階段可以進行的操作。

后臺API

Keras作為一個高階應(yīng)用程序接口,其底層計算不是獨立完成的,而是構(gòu)架于支持張量計算的符號數(shù)學庫之上,截至穩(wěn)定版本2.2.4,Keras支持的底層構(gòu)架包括Tensorflow、微軟CNTK和Theano。Keras的后臺API(keras.backend)包含一系列與后臺交互的組件,這些組件中的部分函數(shù)對所有后臺通用,但也包含一部分限制于特定后臺的函數(shù)和類??。

通用后臺工具

Keras后臺API的一些函數(shù)和類能夠不依賴于特定的后臺類型直接操作張量,這些函數(shù)在Keras文檔中被稱為“抽象后臺(abstract Keras backend)函數(shù)”。后臺API的抽象函數(shù)超過50個,按功能包括定義張量,例如keras.backend.placeholder、查看與檢索張量,例如keras.backend.print_tensor、對張量進行計算,例如keras.backend.abs、內(nèi)置函數(shù)/子類的計算,例如keras.backend.gradients、查看與修改后臺設(shè)置,例如keras.backend.backend、keras.backend.set_epsilon以及通用的后臺計算交互,例如keras.backend.ckear_session等??。

后臺指令交互

Keras后臺API的一部分類是面向特定后臺設(shè)計的,在導入keras后臺,例如"import keras.backend as K"后,按后臺選項,可通過K.tf和K.th調(diào)出TensorFlow和Theano的后臺。在K.tf和K.th可以直接接收對應(yīng)的后臺指令,這里給出一個Tensorflow后臺的例子??:

keras.json

Keras在導入后會生成一份json文件,通常位于用戶主目錄下的.keras/keras.json,該文件定義了Keras的全局選項,并顯式指定了后臺。這里給出一個后臺文件的例子??:

通過后臺API可以查看keras.json的內(nèi)容,例如對上述例子keras.backend.epsilon會返回1e-07。修改keras.json的“backend”可以切換Keras的后臺??。

數(shù)據(jù)預處理

序列

Keras的序列數(shù)據(jù)預處理API可用于對時間序列和字符嵌入后的文本序列進行預處理。這里簡要列出其功能??:

文本

Keras提供了文本數(shù)據(jù)預處理的類和函數(shù),這里簡要列出其功能??:

圖像

Keras的圖像數(shù)據(jù)預處理API是1個圖像的生成器類:keras.preprocessing.image.ImageDataGenerator。在給定圖像樣本后,ImageDataGenerator可以進行數(shù)據(jù)強化(data augmentation)操作,包括旋轉(zhuǎn)、反轉(zhuǎn)、平移、白化病等并輸出圖像??。

其它組件

函數(shù)

損失函數(shù)(keras.losses)

Keras以函數(shù)的形式定義了可用于神經(jīng)網(wǎng)絡(luò)學習和評價的損失函數(shù),這里按表格的形式給出其內(nèi)置損失函數(shù)的名稱,代碼和說明??:

Keras的所有損失函數(shù)都接收2個輸入,按順序為代表真實值和代表預測值的張量,以TensorFlow為后臺時,是tf.Tensor類,接收張量的大小必須匹配??。

表格中的損失函數(shù)可以按關(guān)鍵字調(diào)用,關(guān)鍵字與函數(shù)名相同,例如keras.losses.categorical_crossentropy的關(guān)鍵字為‘categorical_crossentropy’。一些損失函數(shù)的關(guān)鍵字有別名,例如keras.losses.mean_squared_error的關(guān)鍵字為可以為'mean_squared_error'或'mse'??。

激活函數(shù)(keras.activations)

Keras按兩類方式提供神經(jīng)網(wǎng)絡(luò)模型的激活函數(shù):一部分作為keras.engine.base_layer.Layer的子類被封裝至層API中,另一部分則按函數(shù)的形式定義??。這里給出按函數(shù)形式定義的激活函數(shù)??:

激活函數(shù)接收一個張量并返回一個相同大小的張量,keras.activations.softmax的參數(shù)axis表示歸一化的維度,默認為張量的最后1維,keras.activations.relu和keras.activations.elu的參數(shù)為其超參數(shù)??。

表格中激活函數(shù)可以按關(guān)鍵字調(diào)用,關(guān)鍵字與函數(shù)名相同。按關(guān)鍵字調(diào)用激活函數(shù)時,激活函數(shù)的超參數(shù)取默認值??。

評價函數(shù)(keras.metrics)

在應(yīng)用方面,keras.losses中定義的所有函數(shù)均可作為評價函數(shù)使用,此外,keras.metrics額外定義了5個評價函數(shù)??:

上述評價函數(shù)接收2個輸入,按順序為代表真實值和代表預測值的張量,張量大小必須匹配。評價函數(shù)可以按關(guān)鍵字調(diào)用,例如keras.metrics.binary_accuracy的關(guān)鍵字為'binary_accuracy'或'acc'??。

通用工具

Keras提供了神經(jīng)網(wǎng)絡(luò)學習中可用的其它通用工具(keras.utils),這里將其列出??:

Scikit-Learn封裝器

完成編譯(和學習)的keras模型可以通過Scikit-Learn封裝器輸出1個Scikit-Learn對象并加入到其環(huán)境下的機器學習和統(tǒng)計學習流程中??。具體地,keras分類器使用keras.wrappers.scikit_learn.KerasClassifier進行封裝,keras回歸器使用keras.wrappers.scikit_learn.KerasRegressor進行封裝,封裝時可以使用Scikit-Learn對象的共有屬性和方法,包括fit、predict、predict_proba、score等??。該API要求Python環(huán)境預裝Scikit-Learn??。

預編譯模型

這里按表格的形式給出keras包含的預編譯模型??:

自帶數(shù)據(jù)

Keras包含6份自帶數(shù)據(jù)集,這里按表格形式給出其元數(shù)據(jù)??:

生態(tài)系統(tǒng)

Keras在谷歌 Group和slack上有用戶交流區(qū),細節(jié)有在其官方文檔的主頁列出??。錯誤報告和新功能請求可以通過Keras在GitHub的開發(fā)者頁面進行反饋??。在Keras的Github項目頁面上,有列出開發(fā)計劃,用戶可以申請加入并貢獻內(nèi)容??。此外,Keras官方文檔有介紹反饋錯誤和參與開發(fā)的準則??。

Keras包含一些與神經(jīng)網(wǎng)絡(luò)的微調(diào)和結(jié)構(gòu)優(yōu)化有關(guān)的子項目,包括AutoKeras??和Keras-Tuner??,截至Keras主分支版本2.2.4,二者均處于開發(fā)階段,未提供穩(wěn)定版本。

比較與評價

根據(jù)其官方文檔,Keras在開發(fā)時的關(guān)注點包括:用戶友好、模塊化、可擴展性和完全的Python支持。Keras同時也提供了由代碼-產(chǎn)品間轉(zhuǎn)化的途徑,例如支持在iOS的Apple's CoreML??、Android的TensorFlow運行以及網(wǎng)頁的ECMAScript運行??。

Keras被認為是深度學習開發(fā)端受到關(guān)注的工具之一,例如在2018年的一份測評中,Keras的普及率僅次于TensorFlow,超過了PyTorch微軟CNTK和Theano??。

參考資料 >

生活家百科家居網(wǎng)