什麼是Keras?深度神經網絡API詳解

什麼是Keras?深度神經網絡API詳解

編譯:碼上打卡團隊

雖然深度神經網絡風靡一時,但主要框架的複雜性已成為新機器學習用戶使用的障礙。已經提出了幾種用於構建神經網絡模型的改進和簡化的高級API的建議,所有這些建議從整體看起來相似但在仔細檢查時顯示出差異。

Keras是領先的高級神經網絡API之一。它是用Python編寫的,支持多個後端神經網絡計算引擎。

Keras和TensorFlow

鑑於TensorFlow項目已採用Keras作為即將推出的TensorFlow 2.0版本的高級API,Keras看起來是贏了。在本文中,我們將探討Keras的原理和實現,著眼於理解為什麼它是對低級深度學習API的改進。

即使在TensorFlow 1.12中,官方的TensorFlow入門教程也使用了TensorFlow中嵌入的高級Keras API:tf.keras。相比之下,TensorFlow Core API需要使用TensorFlow計算圖,張量,操作和會話,當您剛剛開始使用TensorFlow時,其中一些很難理解。主要是在調試時,使用低級TensorFlow Core API有一些優點,但幸運的是,您可以根據需要混合使用高級和低級TensorFlow API。

Keras原則

Keras的創建是為了用戶友好,模塊化,易於擴展,並與Python一起使用。API是“為人類而不是機器設計的”,並且“遵循減少認知負荷的最佳實踐”。

神經層,成本函數,優化器,初始化方案,激活函數和正則化方案都是獨立模塊,您可以將它們組合在一起以創建新模型。新模塊很容易添加,作為新的類和函數。模型在Python代碼中定義,而不是單獨的模型配置文件。

為什麼選擇Keras?

使用Keras的最大原因源於其指導原則,主要是關於用戶友好的原則。除了易於學習和簡化模型構建之外,Keras還具有廣泛採用的優勢,支持廣泛的生產部署選項,與至少五個後端引擎(TensorFlow,CNTK,Theano,MXNet和PlaidML)集成,並強烈支持多個GPU和分佈式培訓。此外,Keras還得到了谷歌,微軟,亞馬遜,蘋果,Nvidia,優步等公司的支持。

Keras後端

Keras本身並不進行自己的低級操作,例如張量積和卷積; 它依賴於後端引擎。儘管Keras支持多個後端引擎,但其主要(和默認)後端是TensorFlow,其主要支持者是Google。Keras API打包在TensorFlow中的tf.keras中,如前所述,它將成為TensorFlow 2.0的主要TensorFlow API。

要更改後端,只需編輯$HOME/.keras/keras.json文件並指定其他後端名稱,例如theano或CNTK。或者,您可以通過KERAS_BACKEND在shell中或使用os.environ["KERAS_BACKEND"]屬性在Python代碼中定義環境變量來覆蓋已配置的後端。

Keras型號

該模型是Keras的核心數據結構。Keras中有兩種主要的模型類型:Sequential模型,以及Model與功能API一起使用的類。

Keras順序模型

該Sequential模型是層的線性堆棧,並且可以非常簡單地描述層。以下是Keras文檔中的一個示例,該文檔用於model.add()在Sequential模型中定義兩個密集層:

import keras

from keras.models import Sequential

from keras.layers import Dense

#註釋:使用add方法在用Dense層創建Sequentials模型

model = Sequential()

#Dense 實現步驟:

# output = activation(dot(input, kernel) + bias)

#單位是層的輸出空間的維數,等於隱藏單位的數量

# 激活和丟失函數可以由字符串或類指定

model.add(Dense(units=64, activation='relu', input_dim=100))

model.add(Dense(units=10, activation='softmax'))

#編譯方法配置模型的學習過程

model.compile(loss='categorical_crossentropy',

optimizer='sgd',

metrics=['accuracy'])

#fit方法做批量訓練

# x_train和y_train是Numpy數組,就像Scikit(一個學習API)

model.fit(x_train, y_train, epochs=5, batch_size=32)

#evaluate方法為訓練的模型計算丟失函數和矩陣

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

#predict方法為輸入的數據執行訓練的模型,輸出結果

classes = model.predict(x_test, batch_size=128)

上面代碼中的註釋值得一讀。還有一點值得注意的是,與低級TensorFlow API相比,實際代碼中有多少。每個層定義需要一行代碼,編譯(學習過程定義)需要一行代碼,擬合(訓練),評估(計算損失和度量),以及預測訓練模型的輸出每行需要一行代碼。

Keras功能API

Keras Sequential模型很簡單,但在模型拓撲中受到限制。所述Keras功能API是用於與共享層創建複雜的模型,如多輸入/多輸出模式,有向非循環圖(DAG),和模型是有用的。

功能API使用與Sequential模型相同的層,但在將它們組合在一起時提供了更大的靈活性。在功能API中,首先定義圖層,然後創建模型,編譯它,然後擬合(訓練)它。評估和預測與Sequential模型基本相同,因此在下面的示例代碼中已省略。

from keras.layers import Input, Dense

from keras.models import Model

# 這邊返回一個張量

inputs = Input(shape=(784,))

# 一個層實例在一個張量時是可調用的,然後返回一個張量

x = Dense(64, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

predictions = Dense(10, activation='softmax')(x)

# 這裡創建一個包括輸入層和三個Dense層

model = Model(inputs=inputs, outputs=predictions)

model.compile(optimizer='rmsprop',

loss='categorical_crossentropy',

metrics=['accuracy'])

model.fit(data, labels) # starts training

Keras層

在前面的例子中,我們只使用了Dense圖層。Keras有多種預定義的圖層類型,還支持編寫自己的圖層。

核心層包括Dense(點積加偏差),Activation(傳遞函數或神經元形狀),Dropout(在每次訓練更新時隨機將輸入單位的一部分設置為0以避免過度擬合),Lambda(將任意表達式包裝為Layer對象),以及其他幾個。卷積層(使用濾波器創建要素圖)從1D到3D運行,包括最常見的變體,例如每個維度的裁剪和轉置卷積層。2D卷積受到視覺皮層功能的啟發,通常用於圖像識別。

池(縮減)層從1D到3D運行幷包括最常見的變體,例如最大和平均池。局部連接的層就像卷積層一樣,除了權重是非共享的。循環層包括簡單(完全連接的重複),門控,LSTM等; 這些對於語言處理以及其他應用程序非常有用。噪聲層有助於避免過度擬合。

Keras數據集

Keras通過keras.datasets課程提供了七個常見的深度學習樣本數據集。這包括cifar10和cifar100小彩色圖像,IMDB電影評論,路透社新聞專題,MNIST手寫數字,MNIST時尚圖片和波士頓房價。

Keras應用程序和示例

Keras還提供十種著名的模型,稱為Keras應用程序,預先針對ImageNet:Xception,VGG16,VGG19,ResNet50,InceptionV3,InceptionResNetV2,MobileNet,DenseNet,NASNet,MobileNetV2TK。您可以使用它們來預測圖像的分類,從中提取特徵,並在不同的類集上微調模型。

順便說一句,微調現有模型是加速培訓的好方法。例如,您可以根據需要添加圖層,凍結基礎圖層以訓練新圖層,然後解凍一些基礎圖層以微調培訓。您可以通過設置凍結圖層layer.trainable = False。

該Keras實例庫包含超過40個樣本模型。它們涵蓋了視覺模型,文本和序列以及生成模型。

部署Keras

Keras模型可以部署在廣泛的平臺上,可能比任何其他深度學習框架都要多。這包括iOS,通過CoreML(Apple支持); Android,通過TensorFlow Android運行時 ; 在瀏覽器中,通過Keras.js 和 WebDNN ; 在Google Cloud上,通過 TensorFlow-Serving ; 在Python webapp後端 ; 在JVM上,通過DL4J模型導入 ; 並在Raspberry Pi上。

要開始使用Keras,請閱讀文檔,查看代碼存儲庫,安裝TensorFlow(或其他後端引擎)和Keras,並試用Keras Sequential模型的入門教程。從那裡你可以進入其他教程,並最終探索Keras示例。


分享到:


相關文章: