建立深度學習模型



我們的神經網路模型將由線性堆疊的層組成。為了定義這樣的模型,我們呼叫Sequential函式 -

model = Sequential()

輸入層

我們使用以下程式語句定義輸入層,它是我們網路中的第一層 -

model.add(Dense(512, input_shape=(784,)))

這將建立一個具有512個節點(神經元)和784個輸入節點的層。如下圖所示 -

Input Layer

請注意,所有輸入節點都完全連線到第1層,即每個輸入節點都連線到第1層的全部512個節點。

接下來,我們需要為第1層的輸出新增啟用函式。我們將使用ReLU作為我們的啟用函式。啟用函式使用以下程式語句新增 -

model.add(Activation('relu'))

接下來,我們使用下面的語句新增20%的Dropout。Dropout是一種用於防止模型過擬合的技術。

model.add(Dropout(0.2))

此時,我們的輸入層已完全定義。接下來,我們將新增一個隱藏層。

隱藏層

我們的隱藏層將包含512個節點。隱藏層的輸入來自我們先前定義的輸入層。所有節點都像前面一樣完全連線。隱藏層的輸出將傳遞到網路中的下一層,這將是我們的最終輸出層。我們將使用與上一層相同的ReLU啟用函式和20%的Dropout。新增此層的程式碼如下 -

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

此階段的網路可以視覺化如下 -

Input Layer

接下來,我們將向網路新增最後一層,即輸出層。請注意,您可以使用類似於此處使用的程式碼新增任意數量的隱藏層。新增更多層會使網路訓練變得複雜;但是,在許多情況下(儘管並非所有情況)都能帶來更好的結果的顯著優勢。

輸出層

輸出層僅包含10個節點,因為我們要將給定的影像分類為10個不同的數字。我們使用以下語句新增此層 -

model.add(Dense(10))

由於我們要將輸出分類為10個不同的單元,因此我們使用softmax啟用函式。對於ReLU,輸出是二元的。我們使用以下語句新增啟用函式 -

model.add(Activation('softmax'))

此時,我們的網路可以視覺化如下 -

Output Layer

此時,我們的網路模型已在軟體中完全定義。執行程式碼單元,如果沒有錯誤,您將在螢幕上看到確認訊息,如下圖所示 -

network model

接下來,我們需要編譯模型。

廣告
© . All rights reserved.