(1)邊長的計算公式是:
output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1
輸入圖片大小為200×200,依次經過一層卷積(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一層卷積(kernel size 3×3,padding 1,stride 1)之后,輸出特征圖大小為:
(200-5+2*1)/2+1 為99.5,取99
(99-3)/1+1 為97
(97-3+2*1)/1+1 為97
研究過網絡的話看到stride為1的時候,當kernel為 3 padding為1或者kernel為5 padding為2 一看就是卷積前后尺寸不變(卷積向下取整,池化向上取整)。
(2)如果是反卷積(deconvolution)
輸入:2x2, 卷積核:4x4, 滑動步長:3, 輸出:7x7
公式:2x4-(4-3)x(2-1)=8-1=7
output_w= input_w * kernerl_size - (kernel_size - stride)*(input_w - 1)
或者: (2 - 1) * 3 + 4 = 7
output = (input_w - 1) * stride + kernel_size
參考自 https://blog.csdn.net/qq_28424679/article/details/78665273
卷積運算和矩陣乘法的關系
考慮如下一個簡單的卷積計算:
我們再把4x4的輸入特征展成[16,1]的矩陣X ,那么Y = CX則是一個[4,1]的輸出特征矩陣,把它重新排列2×2的輸出特征就得到最終的結果,從上述分析可以看出卷積層的計算其實是可以轉化成矩陣相乘的。值得注意的是,在一些深度學習網絡的開源框架中並不是通過這種這個轉換方法來計算卷積的,因為這個轉換會存在很多無用的0乘操作。
通過上述的分析,我們已經知道卷積層的前向操作可以表示為和矩陣C相乘,那么 我們很容易得到卷積層的反向傳播就是和C的轉置相乘。
反卷積和卷積的關系
反卷積又被稱為 轉置卷積(transposed convolution),其實卷積層的前向傳播過程就是反卷積層的反向傳播過程,卷積層的反向傳播過程就是反卷積層的前向傳播過程。因為卷積層的前向反向計算分別為乘 C和C的轉置,而卷積層的前向反向計算分別為成C的轉置和 C轉置的轉置。所以它們的前向傳播和反向傳播剛好相反。
Fractionally Strided Convolution
反卷積也被稱為 小數步長的卷積。對於步長s大於1的卷積,其對應的反卷積步長s小於1.對於反卷積的小數步長可以理解為:在其輸入特征單元之間插入s-1個0,插入0后的看作新的特征輸入,然后此時的步長不再是小數,而是1。因此反卷積的輸入輸出關系為:
o = s(i-1)+k - 2*p