Keras

Keras

Keras是一個由Python編寫的開源人工神經網路庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應用程式接口,進行深度學習模型的設計、調試、評估、套用和可視化。

Keras在代碼結構上由面向對象方法編寫,完全模組化並具有可擴展性,其運行機制和說明文檔有將用戶體驗和使用難度納入考慮,並試圖簡化複雜算法的實現難度。Keras支持現代人工智慧領域的主流算法,包括前饋結構和遞歸結構的神經網路,也可以通過封裝參與構建統計學習模型。在硬體和開發環境方面,Keras支持多作業系統下的多GPU並行計算,可以根據後台設定轉化為Tensorflow、Microsoft-CNTK等系統下的組件。

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

基本介紹

  • 外文名:Keras
  • 開發者:François Chollet 等 
  • 初始版本:0.1.0/2015年6月13日 
  • 穩定版本:2.3.0/2019年09月17日 
  • 程式語言:Python
  • 平台:Linux,macOS,Windows
  • 類型:神經網路庫,應用程式接口
  • 許可協定:MIT License(不包含預編譯模型)
歷史與命名,安裝,神經網路API,屬性與方法,搭建模型,使用模型,層API,屬性與方法,核心層,卷積層與池化層,循環層與循環單元,層間合併,自定義層,其它子類,學習與最佳化API,最佳化器,初始化器,正則化器,參數限制器,回調函式,後台API,通用後台工具,後台指令互動,keras.json,數據預處理API,序列,文本,圖像,其它組件,函式,通用工具,Scikit-Learn封裝器,預編譯模型,自帶數據,生態系統,比較與評價,

歷史與命名

Keras的前身是François Chollet為ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System)項目所的編寫的代碼,在2015年分離成為開源的人工神經網路工具。Keras的最初版本以Theano為後台,設計理念參考了Torch但完全由Python編寫。2015年11月的Keras測試版本0.3.0,Tensorflow被加入了後台選項。2016年4月,Keras在PIPy上發布了第一個穩定版本1.0.0。2017年5月,Keras版本2.0.0發布。同年6月,Keras版本2.0.5測試性地將Microsoft-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穩定版本2.3.0的更新文檔中,Keras團隊宣布了計畫調整:在該版本之後,Keras將集中於Tensoflow後台的有關內容,多後台Keras的開發優先度被降低,且更新將僅包含補丁(bug fix),不會有新的功能性內容移植/加入。
Keras的命名來自古希臘語“κέρας (牛角)”或 “κραίνω(實現)”,意為將夢境化為現實的“牛角之門”。由荷馬史詩《奧德賽》第19卷佩涅羅佩與奧德修斯的對話,無法挽留的夢幻擁有兩座門,一座門由牛角製成,一座門由象牙製成,象牙之門內光彩奪目,卻僅是無法實現的夢境;唯有走進牛角之門,才能由夢境看見真實。

安裝

Keras支持Python 2.7-3.6版本,且安裝前要求預裝TensorFlow、Theano、Microsoft-CNTK中的至少一個。其它可選的預裝模組包括:h5py,用於將Keras模型的保存為HDF檔案;cuDNN,用於GPU計算;PyDot,用於模型繪圖。Keras可以通過PIPy、Anaconda安裝,也可從GitHub上下載原始碼安裝:
pip install kerasconda install keras

神經網路API

Keras的神經網路API是在封裝後與使用者直接進行互動的API組件,在使用時可以調用Keras的其它組件。除數據預處理外,使用者可以通過神經網路API實現機器學習任務中的常見操作,包括人工神經網路的構建、編譯、學習、評估、測試等。

屬性與方法

Keras支持序列化模型和函式化模型,且二者具有一定數量的公有屬性(attribute)和方法(method)。其中的公有屬性包括layers、inputs、outputs,能夠以Python列表的形式返回模型信息:
  • model.layers返回一個列表,列表中包含該模型內所有已創建的層對象(參見“層API”),例如keras.layers.Dense
  • model.inputs返回一個列表,列表包含該模型輸入端接收的數據類型,例如以Tensorflow為後台時返回tf.Tensor
  • model.outputs與model.inputs相同但返回輸出端信息。
Keras模型的公有方法主要與模型權重和結構有關,這裡分別介紹如下:
  • model.summary返回該模型的結構信息、總參數量、可學習參數量等信息。
  • model.get_config返回一個字典,字典包含該模型所有對象的結構和編譯信息。Keras可以通過該信息建立新模型。
  • model.get_weights返回一個列表,列表中每個成員都是NumPy數組形式的模型權重,列表的順序為輸入端到輸出端。
  • model.set_weights(pre_trained_w)指定模型的所有權重,指定的權重必須與model.get_weights返回的權重大小一致。
  • model.to_yaml將Keras模型的結構輸出為yaml檔案,不包含模型權重。輸出完成後,Keras模型可以由yaml檔案導入。
  • model.save_weights(filepath)將Keras模型的權重保存為HDF5檔案,運行時指定檔案路徑filepath。
  • model.load_weights(filepath, by_name=False)由HDF5檔案導出權重到模型。model.load_weights通常只接受model.save_weights輸出的檔案,在接收其他來源的檔案時,需要指定by_name=True並要求HDF5的變數名與模型層對象的名字相同。

搭建模型

序列化模型(keras.models.Sequential)
Keras的序列化模型是由其API中層對象(參見“層API”)堆疊得到的神經網路模型。序列化模型有兩種定義方式,一種是運行keras.models.Sequential時由列表指定所有的層對象,另一種是在運行時不指定層API,而是對Sequential類使用model.add添加層對象,這裡給出使用的例子:
import keras# 定義一個8-16-2的感知器(方法一)model = keras.models.Sequential([keras.layers.Dense(16, activation='relu', input_shape=(8,)),                                 keras.layers.Dense(2, activation='sigmoid')])# (方法二)model = keras.models.Sequential()model.add(keras.layers.Dense(16, activation='relu', input_shape=(8,)))model.add(keras.layers.Dense(2, activation='sigmoid'))
序列模型不顯式定義輸入層,因此其第一個層對象要求指定輸入數據的大小,例子中使用了參量input_shape,也可等價地使用參量input_dim。
函式化模型(keras.models.Model)
Keras的函式化模型也被稱為functional API,其功能是將一個張量指定為輸入,另一個張量指定為輸出,並將與輸入、輸出張量之間存在連線的節點(層對象)組合成神經網路模型。這裡提供一個函式化模型的使用例子。
import keras# 定義一個8-16-2的感知器IN = keras.layers.Input(shape=(8,))HIDDEN = keras.layers.Dense(16, activation='relu')(IN)OUT = keras.layers.Dense(2, activation='sigmoid')(HIDDEN)model = keras.models.Model(inputs=IN, outputs=OUT)
相比於序列化模型,函式化模型顯示定義了隱含層的張量,因此可以更容易地搭建非序列化的模型,具有更好的可擴展性。此外,Keras的函式化模型支持自定義的子類繼承,但在定義子類時,模型的拓撲結構由Keras的Python代碼而不是層對象的靜態圖指定,因此一部分基於模型靜態圖的方法在子類繼承後無法使用。

使用模型

編譯(model.complie)
Keras模型的編譯由model.compile實現,運行時可將Keras代碼翻譯為後台代碼以執行學習、評估等後續操作。編譯可以指定學習組件(參見“學習與最佳化API”),其使用格式如下:
model.compile(optimizer, loss=None, metrics=None, loss_weights=None,             sample_weight_mode=None, weighted_metrics=None, target_tensors=None)·
格式中各參量的含義和調用方法如下:
  • optimizer為最佳化器、loss為損失函式、metrics為評價函式,可以按列表使用多個評價。
  • loss_weights為損失權重,可以在多輸出的模型中對不同輸出所對應的損失疊加不同的權重係數,要求提供與模型損失相對應的列表或張量。
  • sample_weight_mode是進行樣本賦權的參量,默認為None,表示在model.fit中進行一維賦權;在編譯時間序列模型時,可選擇sample_weight_mode="temporal",此時模型對時間序列樣本(按時間步)進行二維賦權。
  • weighted_metrics和metrics的用法相同,在不指定樣本賦權時等價於metrics,在指定了樣本賦權時會對賦權樣本的學習進行評價。
  • target_tensor:較少使用的參量,Tensorflow後台的Keras默認為學習目標分配張量占位符,但使用者可以調用該參量顯式指定學習目標的張量。
除上述參量外,根據後台的不同,model.compile也可以將其它參量和關鍵字傳遞至keras.backend.function或tf.Session.run。
學習(model.fit、model.fit_generator)
模型編譯完成後可以使用model.fit或model.fit_generator進行學習,其使用格式如下:
model.fit(x=None, y=None, verbose=1, callbacks=None,           epochs=1, initial_epoch=0, class_weight=None          steps_per_epoch=None, batch_size=None,           validation_split=0.0, validation_data=None,          validation_steps=None, validation_freq=1,          shuffle=True, sample_weight=None) model.fit_generator(generator,...,          max_queue_size=10, workers=1, use_multiprocessing=False)         # ... 表示與model.fit相同的關鍵字
model.fit和model.fit_generator的使用格式包含一些共有的參量,其含義和調用方法如下:
  • verbose表示在學習時顯示進度條和當前評估結果,默認為開啟。
  • callback是回饋器選項(參見“回饋器”)。
  • epochs是學習的紀元數,即對所有學習樣本疊代的次數。
  • initial_epoch表示開始學習時的紀元數,如果沒有載入先前的學習權重則默認為從0開始。
  • class_weight是在分類問題中進行類別賦權的參量,即對不同分類的學習目標使用不同的權重。calss_weight的輸入為一個字典,變數名為類別名,內容為權重,例如對二元分類,類別名通常為“0”和“1”。
除上述共有參量外,對model.fit,其餘參量的含義和調用方法如下:
  • x表示輸入特徵,y表示學習目標,batch_size表示分批學習時單個批次的樣本數。steps_per_epoch表示參與學習的批次數,默認值None表示總樣本數除以單個批次的樣本數,即可允許的最大批次數。
  • validation_split表示樣本中用於模型驗證(validation)的比例,這部分數據會按比例隨機選取且不參與學習。
  • validation_data接收一個包含或(x, y)或(x, y, sample_weight)的Python元組用於學習時的驗證。
  • validation_freq僅在調用了validation_split或validation_data時使用,表示模型驗證的頻率,默認值為1,表示每個紀元都進行驗證。validation_freq也接收列表,列表中的元素表示進行模型驗證的紀元數,例如[1, 5, 10]表示在第1、5、10個紀元進行模型驗證。
  • validation_steps僅在調用了steps_per_epoch後使用,表示參與模型驗證的批次數。
  • shuffle是數據的洗牌選項,僅在調用了steps_per_epoch=None時使用,默認值為True,表示完全洗牌,此外也可選False和batch,後者表示僅在一個批次的樣本內洗牌。
  • sample_weight是對樣本賦權的參量,通常不和類別賦權的參量calss_weight一起調用。在model.compile中定義sample_weight_mode=None時,sample_weight接收一個1維NumPy數組,大小與樣本總數相同;在定義sample_weight_mode=“temporal”時,calss_weight接收一個二維數組,按行表示每個樣本在不同時間步的權重,即數組大小為(sample, timestep)。
對model.fit_generator,其餘參量的含義和調用方法如下:
  • generator表示生成器(參見“通用工具”),返回輸入特徵、學習目標和樣本權重,不返回樣本權重時默認均等賦權。
  • steps_per_epoch的含義與model.fit相同,但默認值為生成器的內部方法__len__(self)的返回值。
  • validation_data的含義與model.fit相同,接收相同的輸入,但也接收驗證數據的生成器。
  • validation_step僅在validation_data接收生成器時使用,表示參與模型驗證的批次數。
  • validation_freq僅在調用了validation_data時有效,表示進行模型驗證的頻率,使用方法與model.fit相同。
  • max_queue_size接收一個整數,表示生成器的最大佇列數。
  • use_multiprocessing默認為False,表示不使用基於執行緒的流程。在計算系統具有多執行緒能力且生成器支持Python的多執行緒處理框架,即支持pickle操作時,可以選擇True。
  • workers表示工作的執行緒數,默認為0,表示僅在主執行緒運行,在use_multiprocessing=True時可選大於0的整數。
評估(model.evaluate、model.evaluate_generator)
在模型完成學習後,Keras提供model.evaluate和model.evaluate_generator進行模型評估,二者的使用格式如下:
model.evaluate(x=None, y=None, batch_size=None, verbose=1,                sample_weight=None, steps=None, callbacks=None)model.evaluate_generator(generator, ...               max_queue_size=10, workers=1, use_multiprocessing=False)               # ... 表示與model.evaluate相同的關鍵字
測試(model.predict、model.predict_generator、model.predict_on_batch)
Keras模型可以通過model.predict、model.predict_generator和model.predict_on_batch進行測試,其使用格式如下:
model.predict(x, batch_size=None, verbose=0, steps=None, callbacks=None)model.predict_generator(generator, ...,                         max_queue_size=10, workers=1, use_multiprocessing=False)model.predict_on_batch(x)

層API

這裡對Keras的層API(keras.layers)進行介紹。在Keras的神經網路API中,層API創建的層對象被用於搭建模型。

屬性與方法

Keras的層API包含一些共有方法,這些方法與給定層對象的結構和權重更新有關:
  • layer.get_weights返回一個列表,列表中的元素為NumPy數組形式的,該層對象的權重矩陣。
  • layer.set_weights(weights) 指定一個層對象的權重,指定的權重必須與layer.get_weights返回的權重大小一致。
  • layer.get_config: 返回一個字典,字典包含該層對象的結構信息。Keras可以通過該信息對層進行重建。
  • layer.get_input_at(node_index) 按節點的索引返回層對象的輸入張量
  • layer.get_output_at(node_index) 按節點的索引返回層對象的輸出張量
  • layer.get_input_shape_at(node_index) 按節點的索引返回層對象輸入張量的大小
  • layer.get_output_shape_at(node_index) 按節點索引返回層對象輸出張量的大小
當一個層對象僅有一個節點,即沒有層對象的合併時,上述方法按屬性的形式使用:
  • layer.input
  • layer.output
  • layer.input_shape
  • layer.output_shape
作為進一步說明,Keras中所有的層(子類),除輸入層外都繼承自keras.engine.base_layer.Layer類,在該類中,層的“節點”是輸入和輸出張量的連結。例如在順序連結的Keras模型中,每個層對象都只有一個節點,但包含共享輸入或輸出的層對象,例如keras.layers.concatenate按張量映射的順序,包含了多個節點。

核心層

輸入層(keras.layers.Input)
Keras的輸入層繼承自keras.engine.input_layer,是一個後台張量,例如tf.Tensor的實現。由Keras的輸入層子類創建層對象的方式為:
keras.layers.Input(shape=None, batch_shape=None,                    name=None, dtype=None, sparse=False, tensor=None)
格式中各參量的含義和調用方法如下:
  • shape和batch_shape表示張量的大小,接收Python元組,其中shape不指定數據批次的長度。
  • name接收一個字元串,表示該輸入層的名稱
  • dtype按字元形式接收張量的數據類型,例如‘float32’、'int32'等
  • spare和tensor表示輸入層返回張量的類型,前者表示是否返回稀疏張量,後者取默認值時創建一個張量占位符,接收了指定張量時返回數值到該指定張量。
全連線層(keras.layers.Dense)
Keras內部全連線層對象的創建方式為:
keras.layers.Dense(units, activation=None, use_bias=True,     kernel_initializer='glorot_uniform', bias_initializer='zeros',     kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,     kernel_constraint=None, bias_constraint=None)
格式中各參量的含義和調用方法如下:
  • activation表示該全連線層使用的激活函式,接收一個激活函式對象,例如keras.activations.sigmoid,也可接收關鍵字,例如'sigmoid',使用關鍵字時該激活函式類的參量取默認值。默認值None表示不使用激活函式。全連線層中激活函式的計算在權重計算完成後進行。
  • use_bias接收一個邏輯變數,默認值為True,表示該全連線層的權重矩陣中包含一個偏差量,偏差量和其餘權重一起在學習時進行更新。
  • kernel_initializer表示該全連線層權重的初始化方法,接收一個keras.initializers對象或其關鍵字,默認值為keras.initializers.glorot_normal(seed=None),從一個0均值的常態分配中取隨機數進行權重初始化。
  • bias_initializer在use_bias=True時可用,接收一個偏差量的初始化器對象或其關鍵字,默認值為keras.initializers.Zeros,表示按0值張量初始化。
  • kernel_regularizer和bias_regularizer表示該全連線層中權重矩陣的正則化方法,接收一個正則化器對象,默認值None表示不使用正則化,使用正則化時可用的對象包括keras.regularizers.l1、keras.regularizers.l2和keras.regularizers.l1_l2。
  • activity_regularizer表示該全連線層輸出的正則化,調用方法與kernel_regularizer和bias_regularizer相同。
  • kernel_constraint和bias_constraint表示該全連線層中權重矩陣使用的參數限制方法,接收一個參數限制器,默認值為None,表示不限制參數,其它可用對象包括keras.constraints.NonNeg、keras.constraints.UnitNorm和keras.constraints.MinMaxNorm。
激活層(keras.layers.Activation)
Keras支持創建獨立的激活層對象,其創建方式為:
keras.layers.Activation(activation)
格式中的activation表示一個Keras的激活函式對象、例如keras.activations.sigmoid。將激活層前置於全連線層時可以實現神經網路中的預激活(pre-activation)操作。激活層和全連線層中的activation參量不產生衝突,同時使用時會分別進行激活函式計算。此外Keras也可以直接從層API創建激活層,參見“特殊激活層”。
隨機失活層
參見:隨機失活
Keras支持隨機連線失活和隨機空間失活,可用的子類包括Dropout、SpatialDropout1D、SpatialDropout2D和SpatialDropout3D,其創建方式為:
keras.layers.Dropout(rate, noise_shape=None, seed=None)keras.layers.SpatialDropout1D(rate) # same for 2D & 3D
格式中rate接收一個0和1之間的浮點數,表示隨機失活的比率。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正則化方法,其創建方式為:
keras.layers.ActivityRegularization(l1=0.0, l2=0.0)
格式中的l1和l2接收對應的正則化係數。輸出正則化層和全連線層中的activity_regularizer參量不產生衝突,使用時會分別執行正則化操作。
張量操作層
Keras在層API中提供了支持特定張量操作的層類。由於張量操作層所進行的操作均可以類比NumPy數組中的對應操作,因此這裡僅對張量操作層進行簡單介紹:
  • keras.layers.Flatten可以將多維張量展開成1維張量,可類比numpy.flatten
  • keras.layers.Reshape和keras.layers.Permute可以調整張量的維度,可類比numpy.reshape和numpy.permute。
  • keras.layers.RepeatVector可以在新的維度複製張量,可類比numpy.repeat。
  • keras.layers.Lambda與Python中匿名函式類似,是一個通用的操作封裝器。
  • keras.layers.Masking忽略張量中取值為給定值的元素,接近於numpy.ma.masked_where。

卷積層與池化層

Keras內置了一系列1維至3維的卷積層和池化層子類用於搭建卷積神經網路,且作為特色地,加入了深度可分卷積、轉置卷積、擴張卷積等較為複雜的構築。另注意到,Keras中卷積層和池化層的“維度”是特徵圖的維度,即一個keras的2維卷積層對象的輸入和輸出都是4維張量,通常為(樣本/批次, 特徵圖第1維, 特徵圖第2維, 通道)。在指定data_format時也可以為(通道, 特徵圖第1維, 特徵圖第2維, 樣本/批次)。
卷積層與深度可分卷積層
Keras包含1維至3維的卷積層,以及2維和3維的深度可分卷積層子類:Conv[1-3]D、SeparableConv[1,2]D。以2維情形為例,其對象的創建方式為:
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid',               dilation_rate=(1, 1), activation=None, use_bias=True, data_format=None,             bias_initializer='zeros', kernel_initializer='glorot_uniform',              kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,              kernel_constraint=None, bias_constraint=None)keras.layers.SeparableConv2D(..., depth_multiplier=1,             depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform',              bias_initializer='zeros', depthwise_regularizer=None,              pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None,              depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None)             # ... 表示Conv2D的共有參量
格式中共有參量的含義和調用方法如下:
  • filters接收一個整數,表示該卷積層的卷積核個數,也被稱為通道數。
  • kernel_size接收一個Python元組,表示每個卷積核的尺寸,例如對3x3的二維卷積核,kernel_size=(2, 2)。
  • strides接收一個Python元組,表示卷積步長。2維卷積核的默認值為(1, 1),表示單步卷積
  • padding是卷積核的0值填充選項,默認值'valid'表示不進行填充(即等效填充),輸入'same'時使用相同填充。
  • dilation_rate是卷積核的擴張比率,2維卷積核的默認值為(1, 1),表示線性卷積,當使用擴張卷積時,元組的值通常大於1。按擴張卷積的定義,當擴張比率大於1時,卷積步長必須等於1,即strides=(1, 1)。
  • data_format是接收特徵度維度順序的參量,默認值None表示張量的第1維表示樣本,最後1維表示通道,等價於輸入"channels_last"。在張量的第1維表示通道時輸入“channels_first”。
  • activation、use_bias、*_initializer、*_regularizer、*_constraint的調用方法參見keras.layers.Dense。
SeparableConv[1,2]D中參量的含義和調用方法如下:
  • depth_multiplier接收一個整數,表示沿通道方向的空間卷積的可分度,默認值1表示完全可分,即每個通道獨立進行空間卷積。
  • depthwise_initializer、depthwise_regularizer、depthwise_constraint接收深度可分卷積中空間卷積部分的初始化器、正則化器和參數限制器。
  • pointwise_initializer、pointwise_regularizer、pointwise_constraint接收深度可分卷積中單位卷積核的初始化器、正則化器和參數限制器。
極大池化、均值池化與全局池化層
Keras支持1維到3維的極大池化、均值池化和全局池化:MaxPooling[1-3]D、AveragePooling[1-3]D、GlobalMaxPooling[1-3]D、GlobalAveragePooling[1-3]D。以2維極大池化和全局極大池化為例,池化層對象的創建方式為:
keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid',                           data_format=None)keras.layers.GlobalMaxPooling2D(data_format=None)
格式中pool_size接收一個Python元組,表示池化層感受野的大小,其餘參量的調用方法與keras.layers.Conv2D相同。
轉置卷積與反池化層
Keras包含2維和3維的轉置卷積子類:Conv[2,3]DTranspose,以及1維至3維的反池化層子類:UpSampling[2,3]D。以2維情形為例,其創建方式為:
keras.layers.Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid',              output_padding=None, dilation_rate=(1, 1), activation=None,              use_bias=True, data_format=None, kernel_initializer='glorot_uniform',             bias_initializer='zeros', bias_regularizer=None,             kernel_regularizer=None, activity_regularizer=None,              kernel_constraint=None, bias_constraint=None)keras.layers.UpSampling2D(size=(2, 2), data_format=None, interpolation='nearest')
Conv2DTranspose的參量的含義和調用方法如下:
  • output_padding接收一個整數或整數元組,表示轉置卷積輸出端的0值填充層數,其中接收元組時,對特徵圖各維度分別使用元組中整數指定的層數進行填充。注意到output_padding指定的整數必須小於步長。原因是轉置卷積(或反卷積)可視為卷積的逆變換,因此output_padding在功能上是對卷積計算的“還原”。作為解釋性的例子,100x100的特徵圖在通過3x3、步長為10、無填充的卷積核後,會輸出為10x10的特徵圖,但由於步長取整的原因,95x95的特徵圖在通過該卷積核後也會得到10x10的特徵圖,因此使用轉置卷積“還原”上述過程時需要指定output_padding以確保能還原到100x100的特徵圖尺寸。
  • 參量filters、kernel_size、strides、padding、dilation_rate、data_format的調用方法與keras.layers.Conv2D相同。activation、use_bias、*_initializer、*_regularizer、*_constraint的含義和調用方可法參見keras.layers.Dense。
UpSampling2D中參量size表示反池化的放大係數,例如一個100x100特徵圖在經過size=(2, 2)的反池化後會輸出200x200的特徵圖。keras.layers.UpSampling2D中的interpolation僅對Tensorflow後台有效,表示反池化的差值方法,默認值‘nearest’表示最接近原則插值,也可接收'bilinear'表示雙線性插值
裁剪和0值填充層
Keras支持創建2維和3維特徵圖的裁剪層對象:Cropping2D、Cropping3D;以及獨立的1維至3維0值填充層對象:ZeroPadding1D、ZeroPadding2D、ZeroPadding3D,以2維情形為例,其創建方式分別為:
keras.layers.Cropping2D(cropping=((0, 0), (0, 0)), data_format=None) # 裁剪keras.layers.ZeroPadding2D(padding=(1, 1)) # 0值填充
參量cropping接收2維或3維元組,表示由特徵圖邊緣向中心裁剪去除的像素個數,對多維元組,其順序為((第1維左, 第1維右), (第2維左, 第2維右))以此類推。cropping也接收單個整數,表示對特徵圖的所有維度進行相同像素的裁剪。參量中的padding表示特徵圖各維度上0值填充的層數。

循環層與循環單元

Keras提供循環層和循環單元用於構建循環神經網路,二者是keras.engine.base_layer.Layer類的子類,屬於層API的一部分,其中循環層是在功能上與其它層對象相當的構築,可以直接堆疊得到神經網路模型;循環單元是循環層內對序列數據的每個時間步進行(系統)狀態和輸出進行處理的模組,一個循環層可以包含一個或多個循環單元。
循環單元子類
Keras的循環單元子類包括簡單循環單元(SimpleRNNCell)、長短期記憶單元(LSTMCell)、門控循環單元(GRUCell),其對應的子類實現方式如下:
簡單循環單元的創建方式為:
keras.layers.SimpleRNNCell(units, activation='tanh', use_bias=True,              kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal',              bias_initializer='zeros',              kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None,              kernel_constraint=None, recurrent_constraint=None, bias_constraint=None,              dropout=0.0, recurrent_dropout=0.0)keras.layers.LSTMCell(recurrent_activation='hard_sigmoid',                       unit_forget_bias=True, implementation=1, ...)       keras.layers.GRUCell(recurrent_activation='hard_sigmoid',                      implementation=1, reset_after=False, ...)                     # ... 表示SimpleRNNCell的共有參量
格式中3類循環單元共有的參量的含義和調用方法如下:
  • units接收一個整數,表示輸入序列的維度或序列特徵的個數。
  • use_bias、bias_initializer、bias_regularizer、bias_constraint的含義和調用方可法參見keras.layers.Dense。
  • activation表示系統狀態的激活函式,默認值為關鍵字'tanh',表示keras.activations.tanh
  • recurrent_initializer、recurrent_regularizer、recurrent_constrain是接收狀態-狀態權重的初始化器、正則化器和參數限制器的參量,使用方法可參見keras.layers.Dense,關鍵字'orthogonal'表示keras.initializers.Orthogonal。
  • kernel_initializer、kernel_regularizer、kernel_constrain是接收狀態-輸入權重的初始化器、正則化器和參數限制器的參量,使用方法可參見keras.layers.Dense。
  • droupout、recurrent_droupout接收0至1的小數,表示狀態-狀態權重和狀態-輸入權重的隨機失活比率。默認值0表示不進行隨機失活操作。
格式中LSTMCell和GRUCell共有的參量的含義和調用方法如下:
  • recurrent_activation表示LSTM或GPU門控的激活函式,默認值為關鍵字'hard_sigmoid',表示keras.activations.hard_sigmoid。
  • implementation是調整LSTM或GRU單元內部計算方案的關鍵字,默認值1表示將內部計算拆分為大量的小型矩陣計算,implementation=2表示將內部計算拆分為少量的大型矩陣計算。兩種計算策略在不同的計算系統中有不同的執行效率。
對LSTMCell,unit_forget_bias是其控制遺忘門偏差量初始化的參量,默認值為True,表示將遺忘門偏差量的初始值設定為1.0。對GRUCell,reset_after=False表示在時序輸入與權重矩陣相乘後使用復位門。此外LSTM單元有對應的循環卷積單元子類。
循環層子類
Keras的循環層子類包括一個可接收任意循環單元的子類:keras.layers.RNN,和預設了特定循環單元的子類:SimpleRNN、GRU、LSTM、LSTM2D。不是一般性這裡只對通用的子類進行介紹:
keras.layers.RNN(cell, return_sequences=False, return_state=False,                  go_backwards=False, stateful=False, unroll=False)
格式中參量的含義和調用方法如下:
  • cell接收循環單元子類,可以是Keras預提供的循環單元,也可以是自定義的循環單元,對後者,該對象需包含call、state_size、out_size等3個方法。接收多個循環單元時,循環單元對象按列表組織先後順序。
  • return_sequences和return_state分別表示輸出最後1個時間步的輸出或所有時間步的輸出,以及是否輸出最後1個時間步的系統狀態。
  • go_backwards表示是否允許在學習時反向輸入序列。
  • stateful表示是在當前批次數據的學習中否保留上對一批次序列學習得到的權重。
  • unroll: 表示是否在學習中“展開”循環單元。“展開”表示循環單元會對所有時間步得到一個複製並按前饋結構進行學習。因為展開後的RNN不需要遞歸計算,因此以提高記憶體開銷為代價加快了學習速度。展開通常僅在短序列輸入時使用。
  • input_dim和input_length表示輸入數據中單個時間步的維度和時間步的個數。
預設了特定循環單元的循環層子類包含了keras.layers.RNN的所有參量,以及對應循環單元的參量。

層間合併

Keras提供了8個層子類用於隱含層的合併,按對應的張量操作方式包括:加Add、減Subtract、乘Multiply、取均值Average、取極大值/極小值Maximum/Minimum、拼接Concatenate、點乘Dot。當上述子類的名稱為全小寫時,即add、multiply等,表示該子類的函式化接口。
層間合併子類的輸入為一個列表,列表內按順序包含需要合併的張量,這裡對張量的拼接給出一個例子:
IN1 = keras.layers.Input(shape=(16,)) # 分支1H1 = keras.layers.Dense(8, activation='relu')(IN1)IN2 = keras.layers.Input(shape=(32,)) # 分支2H2 = keras.layers.Dense(8, activation='relu')(IN2)# 使用函式化接口M = keras.layers.concatenate([x1, x2])# 使用層間合併對象M = keras.layers.Concatenate()([x1, x2])model = keras.models.Model(inputs=[IN1, IN2], outputs=M)

自定義層

Keras可以使用自定義的層對象搭建模型,具體地,一個自定義層子類必須包含3個特定方法,其含義介紹如下:
  • build(self, input_shape)是與隱含層權重有關的方法,包括權重張量的大小、初始化等。該方法的結尾要求指定self.built = True,實現方法之一是super(keras.layers.Layer, self).build(input_shape)
  • call(input_tensor)是層內計算的方法,要求返回張量的計算結果
  • compute_output_shape(input_shape)是返回張量計算後大小的方法。

其它子類

除上述子類外,keras的層API還包含一些其它子類,這裡將其列出並簡要介紹:
  • keras.layers.BatchNormalization是對層對象的輸出張量進行分批歸一化的子類。
  • keras.layers.LeakyReLU、PReLU、ELU、ThresholdedReLU、ReLU和Softmax是可以從層API直接創建的激活層子類。
  • keras.layers.Bidirectional和keras.layers.TimeDistributed是層的封裝器子類,以層對象為輸入並為其賦予特定功能。其中Bidirectional僅接收循環層對象並賦予其雙向連線,TimeDistributed接收所有隱含層對象並將該層的操作在一個維度“複製”。
  • keras.GaussianNoise、GaussianDropout和AlphaDropout為層對象的輸出張量混入噪聲,其中GaussianNoise按加法混入噪聲,GaussianDropout和AlphaDropout按乘法混入噪聲。
  • keras.layers.Embedding可以實現張量的嵌入操作。

學習與最佳化API

最佳化器

Keras內置了7個可在反向傳播算法框架內使用的最佳化器(keras.optimizers),這些最佳化器按keras.optimizers.Optimizer的子類進行封裝,這裡對最佳化器的名稱和實現進行介紹:
名稱對象
均方差傳播算法(RMSprop)
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
隨機梯度下降算法(SGD)
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
自適應梯度下降算法(Adagrad)
keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
自適應學習速率算法(Adadelta)
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
自適應動量估計(Adam)
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
自適應最大階動量估計(Adamax)
keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0)
Nesterov加速自適應動量估計(Nadam)
keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)
最佳化器包含共用參數,其中lr表示學習速率,接收大於0的浮點數、decay表示學習速率隨紀元的遞減,默認值為0,表示學習速率無遞減、epsilon表示最小常數,默認值為keras.backend.epsilon。其餘參數為各最佳化器可選的超參數。
表格中最佳化器可以按關鍵字調用,關鍵字為小寫的子類名稱,例如keras.optimizers.Adam的關鍵字為'adam'。按關鍵字調用最佳化器時,其超參數取默認值。

初始化器

Keras的初始化器子類(keras.initializers)提供了在創建層對象(時需要指定的權重初始化方法。所有的Keras初始化器都繼承自keras.initializers.Initializer,通過對Initializer進行子類繼承,也可以自定義初始化器。這裡列出Keras可用的所有初始化器:
  • keras.initializers.Zeros、Ones、Constants按常量初始化權重。
  • keras.initializers.RandomNormal、RandomUniform、TruncatedNormal、he_uniform、lecun_uniform、glorot_uniform、he_normal、lecun_normal、glorot_normal、VarianceScaling生成隨機數初始化權重
  • keras.initializers.Orthogonal、Identity按正交矩陣單位矩陣初始化權重。

正則化器

正則化器(keras.regularizers)類提供了神經網路學習的正則化操作,即在計算損失函式時考慮該層權重的範數。Keras的正則化器繼承自keras.regularizers.Regularizer類,包括L1正則化、L2正則化和兩者的線性疊加,共3個子類:keras.regularizers.l1、l2、l1l2。注意到,正則化器中的正則化係數,是正則化項(而非經驗風險項)相乘的係數。

參數限制器

Keras中參數限制器(keras.constraints)類的功能是將神經網路權重的取值限定在一個範圍內,防止神經網路在學習過程中出現個別高權重節點控制整體輸出的情形出現;在特定問題下可使神經網路僅包含非負權重。keras.constraints包含4個預設子類:MaxNorm、NonNeg、UnitNorm、MinMaxNorm,功能分別為限制權重極大值、限制負權重、權重(範數)歸一化、權重0-1標準化。

回調函式

Keras的回調函式(keras.callbacks)是一個特殊的類,其功能是在模型的學習過程中按條件觸發給定的操作。Keras的回調函式預置了12個子類,也支持用戶自定義的子類繼承。一般地,回調函式對象在按列表的形式組織後可以在Keras神經網路API中進行調用:
# 定義並編譯你的模型callback_list = [callback1, callback2, callback3] # 定義回饋器records = model.fit(..., callbacks=callback_list, ...) # 在模型學習時調用
記錄與監控工具
Keras的內置回調函式中包含了一系列可用於記錄和監控模型行為的子類:BaseLogger、CSVLogger、ProgbarLogger、History、RemoteMonitor、TensorBoard。其中BaseLogger和History在模型學習時會默認載入,其餘的回調函式為可選載入。
檢查點
ModelCheckpoint可以在模型學習的疊代過程中對模型進行備份,其對象的創建方式如下:
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0,                                 save_best_only=False,                                 save_weights_only=False,                                 mode='auto', period=1)
動態調參和早停工具
Keras的內置回調函式包含了動態調整學習參數和進行學習終止判定的子類,包括LearningRateScheduler、ReduceLROnPlateau、TerminateOnNaN、EarlyStopping,其中前2個子類用於調節最佳化器的學習速率(參見“最佳化器”),後2個子類分別為異常值終止和早停法。上述對象的創建方式如下:
keras.callbacks.LearningRateScheduler(schedule, verbose=0)keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10,                 verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)keras.callbacks.TerminateOnNaN()keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0,                 verbose=0, mode='auto', baseline=None, restore_best_weights=False)
自定義回饋器
使用者可以通過在LambdaCallback中指定操作或對Callback進行子類繼承創建自定義的回調函式。對第1種選擇,LambdaCallback對象的創建方法為:
keras.callbacks.LambdaCallback(on_epoch_begin=None, on_epoch_end=None,                                on_batch_begin=None, on_batch_end=None,                                on_train_begin=None, on_train_end=None)
這裡LambdaCallback的使用方法類似於Python中的匿名函式,格式中的6個參數表示在學習的不同階段可以進行的操作。

後台API

Keras作為一個高階應用程式接口,其底層計算不是獨立完成的,而是構架於支持張量計算的符號數學庫之上,截至穩定版本2.2.4,Keras支持的底層構架包括Tensorflow、Microsoft-CNTK和Theano。Keras的後台API(keras.backend)包含一系列與後台互動的組件,這些組件中的部分函式對所有後台通用,但也包含一部分限制於特定後台的函式和類。

通用後台工具

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

後台指令互動

Keras後台API的一部分類是面向特定後台設計的,在導入keras後台,例如"import keras.backend as K"後,按後台選項,可通過K.tf和K.th調出Tensorflow和Theano的後台。在K.tf和K.th可以直接接收對應的後台指令,這裡給出一個Tensorflow後台的例子:
import keras.backend as K# 使用K.tf對tf.ConfigProto進行操作config = K.tf.ConfigProto()config.gpu_options.allow_growth = True# 使用K.tf對tf.Session進行操作sess = K.tf.Session(config=config)K.set_session(sess)

keras.json

Keras在導入後會生成一份json檔案,通常位於用戶主目錄下的.keras/keras.json,該檔案定義了Keras的全局選項,並顯式指定了後台。這裡給出一個後台檔案的例子:
{    "image_data_format": "channels_last",    "epsilon": 1e-07,        "floatx": "float32",        "backend": "tensorflow"}
通過後台API可以查看keras.json的內容,例如對上述例子keras.backend.epsilon會返回1e-07。修改keras.json的“backend”可以切換Keras的後台。

數據預處理API

序列

Keras的序列數據預處理API可用於對時間序列和字元嵌入後的文本序列進行預處理。這裡簡要列出其功能:
  • keras.preprocessing.sequence.TimeseriesGenerator是時間序列的生成器類,可以將時間序列數據分割為多個批次。
  • keras.preprocessing.sequence.pad_sequences是1個函式,將不同長度的序列填充為相同長度。
  • keras.preprocessing.sequence.skipgrams是1個函式,可以由嵌入的字元序列或語句生成skipgram。
  • keras.preprocessing.sequence.make_sampling_table是1個函式,可以由文本序列的樣本數和採樣係數生成機率採樣表。

文本

Keras提供了文本數據預處理的類和函式,這裡簡要列出其功能:
  • keras.preprocessing.text.Tokenizer是1個用於文本分割的類,按特定規則,例如空格將句子分割為單詞並返回Tokenizer對象,該對象可用於文本編碼等其它預處理操作。
  • keras.preprocessing.text.text_to_word_sequence是1個函式,按特定規則將句子分割並按列表返回單詞序列。
  • keras.preprocessing.text.hashing_trick是1個函式,在給定Python環境下的hash算法後可以將輸入的文本轉化為哈希值
  • keras.preprocessing.text.one_hot類似於hashing_trick,使用Python默認的hash算法進行文本的獨熱編碼

圖像

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

其它組件

函式

損失函式(keras.losses)
Keras以函式的形式定義了可用於神經網路學習和評價的損失函式,這裡按表格的形式給出其內置損失函式的名稱,代碼和說明:
名稱函式使用格式用途說明
keras.losses.mean_squared_error(y_true, y)
用於回歸問題。
均方對數誤差
keras.losses.mean_squared_logarithmic_error(y_true, y)
取對數的均方誤差。
keras.losses.mean_absolute_error(y_true, y)
用於回歸問題,具有稀疏性
百分比平均絕對誤差
keras.losses.mean_absolute_percentage_error(y_true, y)
按百分比計算的平均絕對誤差。
鉸鏈損失
keras.losses.hinge(y_true, y)
用於二元分類問題,具有稀疏性。
平方鉸鏈損失
keras.losses.squared_hinge(y_true, y)
鉸鏈損失的平方。
類別鉸鏈損失
keras.losses.categorical_hinge(y_true, y)
用於多元分類問題,具有稀疏性。
對數雙曲餘弦函式
keras.losses.logcosh(y_true, y)
用於回歸問題,介於均方誤差和平均絕對誤差之間,具有一定的稀疏性。
類別交叉熵
keras.losses.categorical_crossentropy(y_true, y)
用於多元分類問題。
稀疏類型交叉熵
keras.losses.sparse_categorical_crossentropy(y_true, y)
用於分類問題,具有稀疏性。
二元分類交叉熵
keras.losses.binary_crossentropy(y_true, y)
用於二元分類問題。
keras.losses.kullback_leibler_divergence(y_true, y)
用於包含機率分布的回歸或分類問題,例如變分自編碼器的學習。
keras.losses.poisson(y_true, y)
用於包含極大似然估計的回歸問題,例如泊松回歸
餘弦相似性損失
keras.losses.cosine_proximity(y_true, y)
用於矢量化數據的回歸或分類問題。
Keras的所有損失函式都接收2個輸入,按順序為代表真實值和代表預測值的張量,以Tensorflow為後台時,是tf.Tensor類,接收張量的大小必須匹配。
表格中的損失函式可以按關鍵字調用,關鍵字與函式名相同,例如keras.losses.categorical_crossentropy的關鍵字為‘categorical_crossentropy’。一些損失函式的關鍵字有別名,例如keras.losses.mean_squared_error的關鍵字為可以為'mean_squared_error'或'mse'。
激活函式(keras.activations)
Keras按兩類方式提供神經網路模型的激活函式:一部分作為keras.engine.base_layer.Layer的子類被封裝至層API中,另一部分則按函式的形式定義。這裡給出按函式形式定義的激活函式:
名稱函式使用格式說明
keras.activations.sigmoid(x)
二元分類的輸出層、 RNN門控
硬限幅Sigmoid函式
keras.activations.hard_sigmoid(x)
二元分類的輸出層、 RNN門控
keras.activations.softmax(x, axis=-1)
多元分類的輸出層
雙曲正切函式
keras.activations.tanh(x)
(淺層結構的)隱含層、RNN單元
Softsign函式
keras.activations.softsign(x)
(淺層結構的)隱含層
指數函式
keras.activations.exponential(x)
-
線性函式
keras.activations.linear(x)
-
keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0.0)
(深度結構的)隱含層
指數線性函式
keras.activations.elu(x, alpha=1.0)
(深度結構的)隱含層
尺度指數線性函式
keras.activations.selu(x)
(深度結構的)隱含層
Softplus函式
keras.activations.softplus(x)
(深度結構的)隱含層
激活函式接收一個張量並返回一個相同大小的張量,keras.activations.softmax的參數axis表示歸一化的維度,默認為張量的最後1維,keras.activations.relu和keras.activations.elu的參數為其超參數。
表格中激活函式可以按關鍵字調用,關鍵字與函式名相同。按關鍵字調用激活函式時,激活函式的超參數取默認值。
評價函式(keras.metrics)
在套用方面,keras.losses中定義的所有函式均可作為評價函式使用,此外,keras.metrics額外定義了5個評價函式:
  • keras.metrics.binary_accuracy可用於二元分類的評價。
  • keras.metrics.categorical_accuracy、sparse_categorical_accuracy可用於多元分類的評價。
  • keras.metrics.top_k_categorical_accuracy、sparse_top_k_categorical_accuracy可用於前k項分類的評價。
上述評價函式接收2個輸入,按順序為代表真實值和代表預測值的張量,張量大小必須匹配。評價函式可以按關鍵字調用,例如keras.metrics.binary_accuracy的關鍵字為'binary_accuracy'或'acc'。

通用工具

Keras提供了神經網路學習中可用的其它通用工具(keras.utils),這裡將其列出:
  • keras.utils.CustomObjectScope可以為用戶自定義的對象設立關鍵字,並可以在keras代碼中按關鍵字調用該對象。
  • keras.utils.HDF5Matrix是keras與HDF5檔案互動的類,要求Python環境預裝h5Py。
  • keras.utils.Sequence是序列生成器類,其主要作用是創建能夠循環讀取檔案並生成數據的分批導入對象,該對象在神經網路模型的學習、評估和測試中可以使用。
  • keras.utils.to_categorical是進行標記-類別轉換的函式,將標記轉換為類別,其中類別為0-1元素的Numpy矩陣,列數等於輸入數據的不同標記數。
  • keras.utils.normalize是1個函式,功能是數據標準化
  • keras.utils.get_file是1個函式,功能是通過url下載指定數據到本地路徑。
  • keras.utils.plot_model是將編譯的keras模型繪製為圖像的函式,要求Python環境預裝PyDot。
  • keras.utils.print_summary是將編譯的keras模型總結為表格的函式,表格包括keras模型的結構和參數信息。
  • keras.utils.multi_gpu_model是僅在Tensorflow後台時使用的函式,可以將keras模型複製到多塊GPU上進行並行計算。

Scikit-Learn封裝器

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

預編譯模型

這裡按表格的形式給出keras包含的預編譯模型:
名稱提出者(按引用)許可協定
Xception
Chollet (2017)
VGG16
Simonyan and Zisserman (2014)
Creative Commons Attribution License
VGG19
Simonyan and Zisserman (2014)
Creative Commons Attribution License
ResNet50、101、152
He et al. (2015)
MIT許可證
ResNet50V2、101V2、152V2
He et al. (2016)
BSD協定(Facebook)
ResNetXt50、101
Xie et al. (2017)
BSD協定(Facebook)
InceptionV3
Szegedy et al. (2016)
InceptionResNetV2
Szegedy et al. (2017)
阿帕奇授權協定(2.0版)
MobileNet
Howard et al. (2017)
阿帕奇授權協定(2.0版)
DenseNet121、169、201
Huang et al. (2017)
BSD協定(第三版)
NASNet
Zoph et al. (2018)
阿帕奇授權協定(2.0版)
MobileNetV2
Sandler et al. (2018)
阿帕奇授權協定(2.0版)

自帶數據

Keras包含6份自帶數據集,這裡按表格形式給出其元數據
名稱樣本數說明
CIFRA10圖像數據
50000,單樣本為32x32 RGB圖像
包含10個類別,用於圖像分類問題
IMDB電影評價數據
25000,單樣本為矢量化字元編碼
按評價的正/負分類,用於二元情感分析
路透社新聞數據
11228,單樣本為矢量化字元編碼
按新聞主題分為46類,用於主題模型
MINST手寫數字圖像數據
60000,單樣本為28x28灰度圖像
包含10個類別,用於圖像分類問題
MINST時尚物件圖像數據
60000,單樣本為28x28灰度圖像
包含10個類別,用於圖像分類問題
波士頓房價數據
約400個樣本,單樣本包含13個特徵
用於回歸問題

生態系統

Keras在Google Group和Slack上有用戶交流區,細節有在其官方文檔的主頁列出。錯誤報告和新功能請求可以通過Keras在Github的開發者頁面進行反饋。在Keras的Github項目頁面上,有列出開發計畫,用戶可以申請加入並貢獻內容。此外,Keras官方文檔有介紹反饋錯誤和參與開發的準則。
Keras包含一些與神經網路的微調和結構最佳化有關的子項目,包括AutoKeras和Keras-Tuner,截至Keras主分支版本2.2.4,二者均處於開發階段,未提供穩定版本。

比較與評價

根據其官方文檔,Keras在開發時的關注點包括:用戶友好、模組化、可擴展性和完全的Python支持。Keras同時也提供了由代碼-產品間轉化的途徑,例如支持在iOS的Apple's CoreML、Android的TensorFlow運行以及網頁的JavaScript運行。
Keras被認為是深度學習開發端受到關注的工具之一,例如在2018年的一份測評中,Keras的普及率僅次於TensorFlow,超過了PyTorch、Microsoft-CNTK和Theano。

相關詞條

熱門詞條

聯絡我們