筆者邀請您,先思考:
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
版權聲明:作者保留權利,嚴禁修改,轉載請註明原文鏈接。