天天看點

Keras基本用法

Keras是目前使用最為廣泛的深度學習工具之一,它的底層可以支援TensorFlow、MXNet、CNTK和Theano。如今,Keras更是被直接引入了TensorFlow的核心代碼庫,成為TensorFlow官網提供的高層封裝之一。下面首先介紹最基本的Keras API,下面給出一個簡單的樣例,然後介紹如何使用Keras定義更加複雜的模型以及如何将Keras和原生态TensorFlow結合起來。

和TFLearn API類似,Keras API也對模型定義、損失函數、訓練過程等進行了封裝,而且封裝之後的整個訓練過程和TFLearn是基本一緻的,可以分為資料處理、模型定義和模型訓練三個部分。使用原生态的Keras API需要先安裝Keras包,安裝的方法如下:

以下代碼展示了如何使用原生态Keras在MNIST資料集上實作LeNet-5模型。

從以上代碼中可以看出使用Keras API訓練模型可以先定義一個Sequential類,然後在Sequential執行個體中通過add函數添加網絡層。Keras把卷積層、池化層、RNN結構(LSTM、GRU),全連接配接層等常用的神經網絡結構都做了封裝,可以很友善地實作深層神經網絡。在神經網絡結構定義好之後,Sequential執行個體可以通過compile函數,指定優化函數、損失函數以及訓練過程中需要監控等名額。Keras對優化函數、損失函數以及監控名額都有封裝,同時也支援使用自定義的方式,在Keras的API文檔中有詳細的介紹,這裡不再贅述。最後在網絡結構、損失函數和優化函數都定義好之後,Sequential執行個體可以通過fit函數來訓練模型。類似TFLearn中的fit函數,Keras的fit函數隻需給出訓練資料,batch大小和訓練輪數,Keras就可以自動完成模型訓練的整個過程。

除了能夠很友善地處理圖像問題,Keras對訓練神經網絡的支援也是非常出色的。有了Keras APA,循環神經網絡的訓練體系也可以通過簡單的一句指令完成。以下代碼給出了如何通過Keras實作自然語言感情分類問題。使用循環網絡判斷語言的感情(比如在以下例子中需要判斷一個評價是好評還是差評)和自然語言模組化問題類似,唯一的差別在于除了最後一個時間點的輸出是有意義的,其他時間點的輸出都可以忽略,下圖展示了使用循環網絡處理感情分析問題的模型結構。

Keras基本用法

以上兩個樣例針對Keras的基本用法做了詳細的介紹。雖然Keras的封裝,很多經典的神經網絡結構能很快地被實作,不過要實作一些更加靈活的網絡結構、損失函數或者資料輸入方法,就需要對Keras的進階用法有更多的了解。

上面樣例中最重要的封裝就是Sequential類,所有的神經網絡定義和訓練都是通過Sequential執行個體來實作的。然而從這個類的名稱可以看出,它隻支援順序模型的定義。類似Inception這樣的模型結構,通過Sequential類就不容易直接實作了。為了支援更加靈活的模型定義方法,Keras支援以傳回值的形式定義網絡層結構。以下代碼展示了如何使用這種方式定義模型。

通過這樣的方式,Keras就可以實作類似Inception這樣大的模型結構。以下代碼展示了如何通過Keras實作Inception結構。

除了可以支援順序模型,Keras也可以支援有多個輸入或者輸出的模型。以下代碼實作了下圖所示的網絡結構。

Keras基本用法

從以上輸出可以看出Keras在訓練過程中會展示每個輸出層的loss和accuracy。因為輸出層output1隻使用了一個次元為1的隐藏點,是以正确率隻有29.85%。雖然輸出層output2使用了正确答案作為輸入,但是因為在損失函數中權重較低(隻有0.1),是以它的收斂速度較慢,在20個epoch時準确率也隻有92.1%。如果将兩個輸出層的損失權重設為一樣,那麼輸出層output1在20個epoch時的準确率将隻有27%,而輸出層output2的準确率可以達到99.9%。雖然通過傳回值的方式已經可以實作大部分的神經網絡模型,然而Keras API還存在兩大問題。第一,原生态Keras API對訓練資料的處理流程支援得不太好,基本上需要一次性将資料全部全部加載到記憶體。第二,原生态Keras API無法支援分布式訓練。為了解決這兩個問題,Keras提供了一種與原生态TensorFlow結合地更加緊密的方式。以下代碼顯示了如何将Keras和原生态TensorFlow API聯合起來解決MNIST問題。

Modules

<code>activations</code> module: Built-in activation functions.

<code>applications</code> module: Keras Applications are canned architectures with pre-trained weights.

<code>backend</code> module: Keras backend API.

<code>callbacks</code> module: Callbacks: utilities called at certain points during model training.

<code>constraints</code> module: Constraints: functions that impose constraints on weight values.

<code>datasets</code> module: Keras built-in datasets.

<code>estimator</code> module: Keras estimator API.

<code>experimental</code> module: Public API for tf.keras.experimental namespace.

<code>initializers</code> module: Keras initializer serialization / deserialization.

<code>layers</code> module: Keras layers API.

<code>losses</code> module: Built-in loss functions.

<code>metrics</code> module: Built-in metrics.

<code>mixed_precision</code> module: Public API for tf.keras.mixed_precision namespace.

<code>models</code> module: Code for model cloning, plus model-related API entries.

<code>optimizers</code> module: Built-in optimizer classes.

<code>preprocessing</code> module: Keras data preprocessing utils.

<code>regularizers</code> module: Built-in regularizers.

<code>utils</code> module: Keras utilities.

<code>wrappers</code> module: Wrappers for Keras models, providing compatibility with other frameworks.

Classes

<code>class Model</code>: <code>Model</code> groups layers into an object with training and inference features.

<code>class Sequential</code>: Linear stack of layers.

Functions

<code>Input(...)</code>: <code>Input()</code> is used to instantiate a Keras tensor.

繼續閱讀