筆者邀請您,先思考:
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
版權宣告:作者保留權利,嚴禁修改,轉載請註明原文連結。
資料人網是資料人學習、交流和分享的平臺http://shujuren.org 。專註於從資料中學習到有用知識。
平臺的理念:人人投稿,知識共享;人人分析,洞見驅動;智慧聚合,普惠人人。
您在資料人網平臺,可以1)學習資料知識;2)建立資料部落格;3)認識資料朋友;4)尋找資料工作;5)找到其它與資料相關的乾貨。
我們努力堅持做原創,聚合和分享優質的省時的資料知識!
我們都是資料人,資料是有價值的,堅定不移地實現從資料到商業價值的轉換!
點選閱讀原文,進入資料人網。
公眾號推薦:
鏈達君,專註於分享區塊鏈內容。
艾鴿英語,專註於英語口語教育。