【算法】 Keras 四步工作流程

筆者邀請您,先思考:

1 Keras如何設計和開發神經網絡?

Francois Chollet在他的“用Python深度學習”一書中概述了用Keras分4步開發神經網絡的過程。 讓我們用一個簡單的例子來看一下這個過程。

Francois Chollet在他的“深度學習Python”一書中概述了與Keras開發神經網絡的概述。 通過本書前面的一個簡單的MNIST示例,Chollet將網絡構建過程簡化爲與Keras直接相關的4個主要步驟。

這不是機器學習工作流程,也不是用深度學習解決問題的完整框架。 這4個步驟僅適用於整體神經網絡機器學習工作流程中Keras發揮作用的部分。 這些步驟如下:

  • 定義訓練數據
  • 定義神經網絡模型
  • 配置學習過程
  • 訓練模型

雖然Chollet然後花了他的書的其餘部分充分說明了使用它的必要細節,讓我們通過一個例子初步看看工作流程。

1.定義訓練數據

第一步很簡單:您必須定義輸入和目標張量。 更加困難的數據相關方面 - 不屬於Keras特定的工作流程 - 實際上是查找或策劃,然後清理和預處理某些數據,這是任何機器學習任務的關注點。 這是模型的一個步驟,通常不涉及調整模型超參數。

雖然我們的設計示例隨機生成一些要使用的數據,但它捕獲了此步驟的單一方面:定義輸入(X_train)和目標(y_train)張量。

1# Define the training data
2import numpy as np
3
4X_train = np.random.random((5000, 32))
5y_train = np.random.random((5000, 5))

Keras有兩種定義神經網絡的方法:Sequential模型類和Functional API。兩者都有共同定義神經網絡的目標,但採取不同的方法。

Sequential類用於定義網絡層的線性堆棧,然後共同構成模型。在下面的示例中,我們將使用Sequential構造函數創建一個模型,然後使用add()方法將圖層添加到其中。

創建模型的另一種方法是通過Functional API。與Sequential模型限定僅由線性堆棧中的層構成的網絡相反,Functional API提供了更復雜模型所需的靈活性。這種複雜性最好地體現在多輸入模型,多輸出模型和類圖模型的定義的用例中。

我們的示例中的代碼使用Sequential類。它首先調用構造函數,然後調用add()方法將圖層添加到模型中。第一個這樣的調用添加了一個Dense類型的層(“只是你的常規密集連接的NN層”)。 Dense圖層的輸出大小爲16,輸入大小爲INPUT_DIM,在我們的例子中爲32(請查看上面的代碼片段進行確認)。請注意,只有模型的第一層需要明確說明輸入維度;以下層能夠從先前的線性堆疊層推斷出。按照標準做法,整流線性單元激活函數用於該層。

下一行代碼定義了我們模型的下一個Dense層。請注意,此處未指定輸入大小。但是,指定輸出大小爲5,這與我們的多類別分類問題中的假定類別數量相匹配(請再次檢查上面的代碼片段以確認)。由於這是我們用網絡解決的多類分類問題,因此該層的激活功能設置爲softmax。

1# Define the neural network model
2from keras import models
3from keras import layers
4
5INPUT_DIM = X_train.shape[1]
6
7model = models.Sequential()
8model.add(layers.Dense(16, activation='relu', input_dim=INPUT_DIM))
9model.add(layers.Dense(5, activation='softmax'))

通過這幾行,我們定義了Keras模型。 Sequential類的summary()方法提供了對我們模型的以下見解:

3.配置學習過程

通過定義訓練數據和定義模型,可以配置學習過程。 這是通過調用Sequential模型類的compile()方法完成的。 編譯需要3個參數:優化器,損失函數和度量列表。

在我們的示例中,設置爲多類分類問題,我們將使用Adam優化器,分類的交叉熵損失函數,並且僅包括準確度度量。

1# Configure the learning process
2from keras import optimizers
3from keras import metrics
4
5model.compile(optimizer='adam', 
6              loss='categorical_crossentropy', 
7              metrics=['accuracy'])

通過使用這些參數調用compile(),我們的模型現在已經配置了學習過程。

4.訓練模型

此時,我們有訓練數據和完全配置的神經網絡來訓練所述數據。 剩下的就是將數據傳遞給模型以便開始訓練過程,這個過程通過迭代訓練數據來完成。 通過調用fit()方法開始訓練。

fit()至少需要2個參數:輸入和目標張量。 如果沒有提供更多內容,則會執行一次訓練數據迭代,這通常對您沒有任何好處。 因此,在實際的最小範圍內,更常規的是定義一對附加參數:batch_size和epochs。 我們的例子包括這4個參數。

請注意,epoch精度並不是特別令人欽佩,這對於使用的隨機數據是有意義的。

希望通過使用庫作者規定並在此概述的簡單的4步驟流程,可以解釋Keras用於解決普通舊分類問題的方式。

附錄:完整代碼

 1import numpy as np
 2from keras import models
 3from keras import layers
 4from keras import optimizers
 5from keras import metrics
 6
 7X_train = np.random.random((5000, 32))
 8y_train = np.random.random((5000, 5))
 9INPUT_DIM = X_train.shape[1]
10model = models.Sequential()
11model.add(layers.Dense(16, activation='relu', input_dim=INPUT_DIM))
12model.add(layers.Dense(5, activation='softmax'))
13model.compile(optimizer='adam', 
14              loss='categorical_crossentropy', 
15              metrics=['accuracy'])
16model.fit(X_train, y_train, 
17          batch_size=128, 
18          epochs=10)

作者:Matthew Mayo 原文鏈接: https://www.kdnuggets.com/2018/06/keras-4-step-workflow.html

版權聲明:作者保留權利,嚴禁修改,轉載請註明原文鏈接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章