- 使用Keras進行深度學習教程
- 使用Keras進行深度學習 - 首頁
- 使用Keras進行深度學習 - 簡介
- 深度學習
- 專案設定
- 匯入庫
- 建立深度學習模型
- 編譯模型
- 準備資料
- 訓練模型
- 評估模型效能
- 對測試資料進行預測
- 儲存模型
- 載入模型進行預測
- 結論
- 使用Keras進行深度學習資源
- 使用Keras進行深度學習 - 快速指南
- 使用Keras進行深度學習 - 有用資源
- 使用Keras進行深度學習 - 討論
建立深度學習模型
我們的神經網路模型將由線性堆疊的層組成。為了定義這樣的模型,我們呼叫Sequential函式 -
model = Sequential()
輸入層
我們使用以下程式語句定義輸入層,它是我們網路中的第一層 -
model.add(Dense(512, input_shape=(784,)))
這將建立一個具有512個節點(神經元)和784個輸入節點的層。如下圖所示 -
請注意,所有輸入節點都完全連線到第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))
此階段的網路可以視覺化如下 -
接下來,我們將向網路新增最後一層,即輸出層。請注意,您可以使用類似於此處使用的程式碼新增任意數量的隱藏層。新增更多層會使網路訓練變得複雜;但是,在許多情況下(儘管並非所有情況)都能帶來更好的結果的顯著優勢。
輸出層
輸出層僅包含10個節點,因為我們要將給定的影像分類為10個不同的數字。我們使用以下語句新增此層 -
model.add(Dense(10))
由於我們要將輸出分類為10個不同的單元,因此我們使用softmax啟用函式。對於ReLU,輸出是二元的。我們使用以下語句新增啟用函式 -
model.add(Activation('softmax'))
此時,我們的網路可以視覺化如下 -
此時,我們的網路模型已在軟體中完全定義。執行程式碼單元,如果沒有錯誤,您將在螢幕上看到確認訊息,如下圖所示 -
接下來,我們需要編譯模型。
廣告