關於CNN中特征圖大小的計算公式


 

先給出的卷積層輸出大小的的計算公式(這里假設輸入矩陣和卷積核都是方陣,不是方陣其實也類似):

n’= (n-k)/s+1

其中,n’是卷積層輸出的size,n是輸入方陣的size, k是卷積核的size, s是移動的步長。即輸入n*n 的矩陣,用k*k的卷積核對輸入進行卷積,得到大小為n’*n’的特征圖。

一直疑惑要怎么理解這個式子,雖然驗證過多個卷積計算,證明feature map的大小確實等於這個式子的計算結果,但是一直想以一種更直白的方式去理解這個式子。

首先,卷積層輸出的feature map的長度(即輸出矩陣有幾列),實際上就是水平方向上做的卷積次數。輸出矩陣的高度同理。

第二,在計算水平方向上的一行的卷積次數時,不妨將卷積的關注點從k*k的卷積核轉移到卷積核中的一個數上,因為卷積核平移的時候所有數字移動次數都是相同的。那么應當關注哪一個點呢,這是第三步要說的。

第三,我們要關注卷積核的平移,理論上可以關注卷積核中的任意一個數。但是這里我們選擇只關注卷積核的右上角的那個小格子a,由這個數的平移方式可以得知在水平方向上平移了多少次,這個格子a一旦移到了輸入矩陣的外部,那么那次移動后的計算則因為缺少輸入數據而無效。那么接下來的問題就是,怎么計算這個點在輸入矩陣上的移動次數。這個是重點,看第四步。

第四,直觀上第一個想到的應該是,移動次數 = 總長度/移動步長,即,n’= n/s. 考慮一下這個式子的問題在哪里,有沒有發現,卷積核的長度與步長不一定是相同的。也就是說,初始狀態下,右上角那個小格子a在該行的第k個位置上而不是第s個位置上,點a在第一行上的移動軌跡應該是:k,k+s,k+2s,…,而不是s,2s,3s,…,因此點a一共移動了(n-k)/s次,最后再加上在初始位置上也做了一次卷積,因此一共做了(n-k)/s+1次卷積,而這就是輸出特征圖feature map的長度(輸出矩陣的列數)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM