詳解CNN卷積神經網絡那點事兒

點擊上方關注,All in AI中國
詳解CNN卷積神經網絡那點事兒

目錄

  • 什麼是CNN?
  • 我們為什麼要使用CNN?
  • 幾個定義
  • CNN中的圖層
  • Keras實現

1.什麼是CNN?

計算機視覺日新月異的其中一個原因是深度學習。當我們談論計算機視覺時,我們會想到一個術語,卷積神經網絡(縮寫為CNN),因為CNN會在這一領域被大量使用。計算機視覺中CNN的例子是人臉識別、圖像分類等。它類似於基本的神經網絡。 CNN還有可學習的參數,如神經網絡,即權重、偏差等。

2.我們為什麼要使用CNN?

前饋神經網絡問題

假設您正在使用MNIST數據集,您知道MNIST中的每個圖像都是28 x 28 x 1(黑白圖像只包含1個通道)。輸入層中的神經元總數將為28 x 28 = 784,這是可以管理的。如果圖像的大小是1000 x 1000,這意味著你在輸入層需要10⁶個神經元。這似乎是在操作中需要大量神經元。它在計算上無效,這就是卷積神經網絡。簡單來說,CNN所做的就是提取圖像的特徵並將其轉換為較低的維度的圖像,而不會失去其特徵。在下面的例子中,你可以看到初始圖像的大小是224 x 224 x 3,如果你不繼續卷積,那麼你需要224 x 224 x 3 = 100,352個輸入層的神經元數量,但是在應用卷積後,你輸入張量維數減少到1 x 1 x 1000。這意味著你只需要第一層前饋神經網絡中的1000個神經元。

詳解CNN卷積神經網絡那點事兒

3.幾個定義

在理解CNN之前,您應該瞭解的定義很少

3.1圖像表示

考慮到圖像,很容易理解它有高度和寬度,因此用二維結構(矩陣)表示包含在其中的信息是有意義的,直到你記住圖像有顏色,並添加有關圖像的信息顏色,那就是當張量變得特別有用時,我們需要另一個維度。

圖像被編碼成顏色通道,圖像數據在給定點的顏色通道中表示為每種顏色強度,最常見的是RGB,這意味著紅色、藍色和綠色。圖像中包含的信息是每個通道顏色的強度轉換成圖像的寬度和高度,就像這樣

詳解CNN卷積神經網絡那點事兒

因此,具有寬度和高度的每個點處的紅色通道的強度可以表示為矩陣,對於藍色和綠色通道也是如此,因此我們最終具有三個矩陣,並且當它們組合時,它們形成 tensor。

3.2邊緣檢測

每個圖像都有垂直和水平邊緣,實際上組合形成一個圖像。卷積操作與一些濾波器一起用於檢測邊緣。假設您有尺寸為6 x 6的灰度圖像和尺寸為3 x 3的濾鏡(比方說)。當6 x 6灰度圖像與3 x 3濾波器卷積時,我們得到4 x 4圖像。首先,3 x 3濾鏡矩陣乘以我們的灰度圖像的前3 x 3尺寸,然後我們將一列向右移動到結束,之後我們移動一行,依此類推。

詳解CNN卷積神經網絡那點事兒

卷積操作

卷積操作可以通過以下方式可視化。這裡我們的圖像尺寸是4 x 4,濾鏡是3 x 3,因此我們在卷積為2 x 2後得到輸出。

詳解CNN卷積神經網絡那點事兒

卷積的可視化

如果我們有N x N圖像大小和F x F濾波器大小,那麼在卷積結果之後

詳解CNN卷積神經網絡那點事兒

3.3步幅和填充

Stride表示我們在卷積的每一步驟中移動了多少步。默認情況下它是1。

詳解CNN卷積神經網絡那點事兒

與Stride 1的卷積

我們可以觀察到輸出的大小小於輸入的大小。為了保持輸出的維度,我們使用填充。填充是對稱地將0添加到輸入矩陣的過程。在以下示例中,額外的灰色塊表示填充。它用於使輸出的維度與輸入相同。

詳解CNN卷積神經網絡那點事兒

假設'p'是填充

最初(沒有填充)

詳解CNN卷積神經網絡那點事兒

應用填充後

詳解CNN卷積神經網絡那點事兒

應用填充後

如果我們在帶有填充的(N + 2p)x(N + 2p)輸入矩陣中應用濾波器F x F,那麼我們將得到輸出矩陣維數(N + 2p-F + 1)x(N + 2p-F + 1) 。我們知道在應用填充後,我們將獲得與原始輸入維度(N x N)相同的維度。因此我們有,

詳解CNN卷積神經網絡那點事兒

等式(3)清楚地表明Padding取決於濾波器的尺寸。

4.在CNN中的圖層

CNN中有五個不同的層:

  • 輸入層
  • Convo層(Convo + ReLU)
  • 彙集層
  • 完全連接(FC)層
  • Softmax / logistic層
  • 輸出層
  • 不同層次的CNN
詳解CNN卷積神經網絡那點事兒

4.1輸入層

CNN中的輸入層應包含圖像數據。如前所述,圖像數據由三維矩陣表示。您需要將其重塑為單個列。假設您有尺寸為28 x 28 = 784的圖像,則需要在輸入輸入之前將其轉換為784 x 1。如果你有“m”訓練樣例,那麼輸入的維數將是(784,m)。

4.2. Convo層

Convo圖層有時稱為特徵提取圖層,因為圖像的特徵是在此圖層中提取的。首先,如前所述,圖像的一部分連接到Convo層以執行卷積操作,並計算感受場之間的點積(它是輸入圖像的局部區域,具有與濾波器相同的大小)和過濾器。操作結果是輸出量的單個整數。然後我們將濾鏡移到相同輸入圖像的下一個接受域,再次執行相同的操作。我們將一次又一次地重複相同的過程,直到我們完成整個圖像。輸出將是下一層的輸入。

Convo層還包含ReLU激活,以使所有負值為零。

4.3.池化層

詳解CNN卷積神經網絡那點事兒

池化層用於減少卷積後輸入圖像的空間體積。它用於兩個卷積層之間。如果我們在Convo層之後應用FC而不應用池或最大池,那麼它在計算起來會比較昂貴,並且我們不想要它。因此,最大池化只是輸入圖像空間體積的唯一途徑。在上面的例子中,我們在單深度切片中應用了max pooling, Stride為2。你可以看到4×4維的輸入被縮減為2×2維。

池化層中沒有參數,但它有兩個超參數——Filter(F)和Stride(S)。

通常,如果我們有輸入尺寸W1 x H1 x D1,那麼

W2 =(W1-F)/ S + 1

H2 =(H1-F)/ S + 1

D2 = D1

其中W2,H2和D2是輸出的寬度、高度和深度。

4.4.完全連接層(FC)

完全連接的層涉及權重、偏差和神經元。它將一層中的神經元連接到另一層中的神經元。它用於通過訓練對不同類別的圖像進行分類。

4.5. Softmax / Logistic Layer

Softmax或Logistic層是CNN的最後一層。它位於FC層的末尾。 Logistic用於二進制分類,softmax用於多分類。

4.6.輸出層

輸出層包含標籤,該標籤採用單熱編碼形式。

現在你對CNN有了很好的理解。讓我們在Keras實施CNN。

5.Keras實施

我們將使用CIFAR-10數據集來構建CNN圖像分類器。 CIFAR-10數據集有10個不同的標籤

  • 飛機
  • 汽車
  • 鹿
  • 青蛙
  • 卡車

它有50,000個訓練數據和10,000個測試圖像數據。 CIFAR-10中的圖像尺寸為32 x 32 x 3.它帶有Keras庫。

詳解CNN卷積神經網絡那點事兒

模型可視化

如果您使用谷歌colaboratory,那麼請確保您使用的是GPU。檢查GPU是否打開。請嘗試以下代碼。

詳解CNN卷積神經網絡那點事兒

輸出:

詳解CNN卷積神經網絡那點事兒

首先,導入所有必需的模塊和庫。

詳解CNN卷積神經網絡那點事兒

然後加載數據集並將其拆分為訓練集和測試集。

詳解CNN卷積神經網絡那點事兒

我們將輸出CIFAR-10中的訓練樣本形狀、測試樣本形狀和課程總數。我們之前看到有10個班級。為了舉例,我們將從訓練集和測試集中輸出兩個示例圖像。

詳解CNN卷積神經網絡那點事兒

輸出:

詳解CNN卷積神經網絡那點事兒

找到輸入圖像的形狀,然後將其重塑為用於訓練和測試集的輸入格式。之後,將所有數據類型更改為浮點數。

詳解CNN卷積神經網絡那點事兒

通過將訓練數據和測試數據除以255來將數據歸一化到0-1之間,然後使用to_catagorical()函數將所有標籤轉換為單熱矢量。

詳解CNN卷積神經網絡那點事兒

使用單熱編碼顯示類別標籤的更改。

詳解CNN卷積神經網絡那點事兒

輸出:

詳解CNN卷積神經網絡那點事兒

現在創建我們的模型,將加載Convo圖層,然後合併圖層。然後我們將連接密集(FC)層來預測類。輸入到第一個Convo層的輸入數據,該Convo層的輸出用作下一個Convo層的輸入,依此類推。最後,數據被送到FC層,試圖預測正確的標籤。

詳解CNN卷積神經網絡那點事兒

初始化所有參數並使用rmsprops優化器編譯我們的模型。有許多優化器,例如adam、SGD、GradientDescent、Adagrad、Adadelta和Adamax,您可以隨意嘗試它。批量為256,有50個epoch。

詳解CNN卷積神經網絡那點事兒

model.summary()用於查看模型中每個圖層中的所有參數和形狀。您可以觀察到總參數為276,138,總可訓練參數為276,138。非訓練參數為0。

詳解CNN卷積神經網絡那點事兒

輸出:

詳解CNN卷積神經網絡那點事兒

在編譯我們的模型之後,我們將通過fit()方法訓練我們的模型,然後對其進行評估。

詳解CNN卷積神經網絡那點事兒

輸出:

詳解CNN卷積神經網絡那點事兒

經過訓練,我們得到了83.86%的準確率和75.48%的驗證準確性。這個結果還是不錯的。

詳解CNN卷積神經網絡那點事兒

詳解CNN卷積神經網絡那點事兒

結論:

恭喜! 您通過了解Keras的基本概念,在Keras中構建了卷積神經網絡。 您可以通過更改其超參數來試驗它!

詳解CNN卷積神經網絡那點事兒

編譯出品


相關推薦

推薦中...