使用 Keras 進行深度學習 - 深度學習



如引言中所述,深度學習是使用大量資料訓練人工神經網路的過程。訓練完成後,網路將能夠對未見過的資料進行預測。在進一步解釋深度學習是什麼之前,讓我們快速回顧一下神經網路訓練中使用的一些術語。

神經網路

人工神經網路的想法源於我們大腦中的神經網路。一個典型的神經網路由三層組成——輸入層、輸出層和隱藏層,如下圖所示。

Neural Networks

這也被稱為淺層神經網路,因為它只包含一層隱藏層。您可以在上述架構中新增更多隱藏層以建立更復雜的架構。

深度網路

下圖顯示了一個包含四個隱藏層、一個輸入層和一個輸出層的深度網路。

Deep Networks

隨著網路中隱藏層的數量增加,其訓練在所需的資源和完全訓練網路所需的時間方面變得更加複雜。

網路訓練

定義網路架構後,您需要對其進行訓練以進行某些型別的預測。訓練網路是一個為網路中每個連線找到合適權重的過程。在訓練期間,資料透過各個隱藏層從輸入層流向輸出層。由於資料始終從輸入到輸出單向移動,因此我們將此網路稱為前饋網路,並將資料傳播稱為前向傳播。

啟用函式

在每一層,我們計算輸入的加權和並將其饋送到啟用函式。啟用函式為網路引入了非線性。它只是一個將輸出離散化的數學函式。一些最常用的啟用函式是 sigmoid、雙曲正切 (tanh)、ReLU 和 Softmax。

反向傳播

反向傳播是一種用於監督學習的演算法。在反向傳播中,誤差從輸出層反向傳播到輸入層。給定一個誤差函式,我們計算誤差函式相對於分配給每個連線的權重的梯度。梯度的計算從網路向後進行。首先計算最後一層權重的梯度,最後計算第一層權重的梯度。

在每一層,梯度的部分計算都會在計算前一層的梯度時重複使用。這稱為梯度下降。

在本專案教程中,您將定義一個前饋深度神經網路,並使用反向傳播和梯度下降技術對其進行訓練。幸運的是,Keras 為我們提供了所有高階 API 來定義網路架構並使用梯度下降對其進行訓練。接下來,您將學習如何在 Keras 中執行此操作。

手寫數字識別系統

在這個小型專案中,您將應用前面描述的技術。您將建立一個深度學習神經網路,該網路將接受訓練以識別手寫數字。在任何機器學習專案中,第一個挑戰是收集資料。特別是對於深度學習網路,您需要海量資料。幸運的是,對於我們試圖解決的問題,有人已經建立了一個用於訓練的資料集。這稱為 mnist,作為 Keras 庫的一部分提供。該資料集包含多個 28x28 畫素的手寫數字影像。您將在該資料集的主要部分上訓練您的模型,其餘資料將用於驗證您訓練的模型。

專案描述

mnist 資料集包含 70000 張手寫數字的影像。此處複製了一些示例影像以供參考

Mnist Dataset

每張影像的大小為 28 x 28 畫素,總共 768 個不同灰度級別的畫素。大多數畫素傾向於黑色陰影,而只有少數畫素傾向於白色。我們將這些畫素的分佈放入陣列或向量中。例如,典型數字 4 和 5 影像的畫素分佈如下圖所示。

每張影像的大小為 28 x 28 畫素,總共 768 個不同灰度級別的畫素。大多數畫素傾向於黑色陰影,而只有少數畫素傾向於白色。我們將這些畫素的分佈放入陣列或向量中。例如,典型數字 4 和 5 影像的畫素分佈如下圖所示。

Project Description

顯然,您可以看到畫素的分佈(特別是那些傾向於白色色調的畫素)有所不同,這區分了它們所代表的數字。我們將這 784 個畫素的分佈作為輸入饋送到我們的網路。網路的輸出將包含 10 個類別,表示 0 到 9 之間的數字。

我們的網路將包含 4 層——一層輸入層、一層輸出層和兩層隱藏層。每個隱藏層將包含 512 個節點。每一層都完全連線到下一層。當我們訓練網路時,我們將計算每個連線的權重。我們透過應用前面討論的反向傳播和梯度下降來訓練網路。

廣告