2.1單卷積的計算
為了理解神經網絡中卷積層的計算過程,我們首先需要了解單個卷積是如何工作的。
想必大家在學習CNN的過程中都見過下面這張圖(出處在這裏,上面有各種卷積gif圖):
input_shape=(5,5),kernelsize=(3,3),padding='same ',stride=1,output_shape=(5,5)
在此圖中:
在這個計算中:
Ps:在實際應用中,每個輸出特征圖還會配有壹個偏置偏置,上圖中沒有顯示。
2.2神經網絡運算中的卷積層
了解了單個卷積是如何計算的之後,我們就可以從神經網絡的角度來看‘卷積層’的運算過程了。下圖是通過壹層卷積結構,輸入三路圖像(8*8*3),輸出兩路特征圖像(8*8*2)的計算過程:
卷積參數:input_shape=(8,8,3),kernelsize=(3,3),padding='same ' ',stride=1,output_shape=(8,8,2)。
在此圖中:
在這個卷積層操作中:
首先,我們來關註壹下投入和產出。它們的尺度都是(8*8),而輸入是3通道,輸出是2通道(深度學習無論做什麽都要先看輸入和輸出,第壹層和整個模型都是如此)。
其次,我們準備進入我們最熟悉的卷積核計算,但在此之前,我們要知道這個運算發生了多少次卷積核計算。可能有朋友會說卷積的特點之壹就是‘權* * *’,有幾個輸出的時候就有幾個卷積核,每個卷積核從頭到尾掃壹遍輸入特征圖。但是,這其實是不對的!
其實關於卷積核的個數,應該是“幾個通道的輸出有幾組卷積核,每組卷積核的個數等於輸入通道的個數”,如上圖我畫的:
至此,這個卷積層的操作全部完成。
2.3“可訓練參數”驗證
畢竟沒有證據說空話。讓我通過“可訓練參數”的個數來驗證卷積層是否如我所說的那樣運行。妳要知道,卷積層中的“可訓練參數”實際上是指卷積核中的那些值以及要添加的偏移。那麽,按照上面介紹的計算方法,壹個卷積層有多少個“可訓練參數”?我們知道:
由此,我們可以得到:
那麽顯然可訓練參數量應該是:
讓我們用keras的summary()來驗證:
太好了!
記住,普通卷積層的可訓練參數的數量是:
Ps:還有壹種衡量模型大小和復雜度的方法叫做“FLOPs”(浮點運算)。它通常只考慮Conv、FC等參數層中乘法和加法運算的次數,“純加法”運算也會被忽略(如偏置)。卷積層運算中FLOPs的計算公式為:
Ps:這裏需要給大家澄清壹下“感受野”的概念。簡單來說就是卷積神經網絡中某壹層特征圖上的壹個點可以關聯多少個點,對應原始映射。下面用壹張圖來解釋壹下:
上圖是壹個kernel_size=3的三層壹維卷積。我們可以看到,左上方的像素與左下方七個像素的值相關,這意味著它的感受野是7。我們可以明顯地得出以下兩個結論:
這個感受野將在卷積分解的後續解釋中使用。