Deep Learning 30: 卷積理解


一.深度卷積神經網絡學習筆記(一)

1. 這篇文章以賈清揚的ppt說明了卷積的實質,更說明了卷積輸出圖像大小應該為:

假設輸入圖像尺寸為W,卷積核尺寸為F,步幅(stride)為S(卷積核移動的步幅),Padding使用P(用於填充輸入圖像的邊界,一般填充0),那么經過該卷積層后輸出的圖像尺寸為(W-F+2P)/S+1。

2.它寫出為什么會用padding?卷積核大小該如何確定?stride該如何確定?

二. Caffe的卷積原理

1.這篇文章把卷積的過程寫得非常形象化,用簡單的例子用明白了卷積過程在caffe寫代碼的時候是怎么實現的。

2.它還寫了卷積后輸出圖像大小N為

N=[((image_h + 2*pad_h – kernel_h)/stride_h)+ 1]*[((image_w +2*pad_w – kernel_w)/stride_w) + 1]  (結果向上取整)

        image_h:輸入圖像的高度

        image_w:輸入圖像的寬度

        pad_h:在輸入圖像的高度方向兩邊各增加pad_h個單位長度(因為有兩邊,所以乘以2)

        pad_w:在輸入圖像的寬度方向兩邊各增加pad_w個單位長度(因為有兩邊,所以乘以2)

        kernel_h:卷積核的高度

        kernel_w:卷積核的寬度

        stride_h:高度方向的滑動步長;

        stride_w:寬度方向的滑動步長。

        因此,N為輸出圖像大小的長寬乘積,也是卷積核在輸入圖像上滑動可截取的最大特征數。

        K=k*k,表示利用卷積核大小的框在輸入圖像上滑動所截取的數據大小,與卷積核大小一樣大。

 

上面是一般情況下的計算,在tensorflow中根據padding時參數選擇不同,卷積輸出圖像的計算方式也可能不同,見:Tensorflow中卷積的padding操作

3.池化大小的計算與卷積類似:

N=[((image_h + 2*pad_h – kernel_h)/stride_h)+ 1]*[((image_w +2*pad_w – kernel_w)/stride_w )+ 1]  (結果向上取整)

        image_h:輸入圖像的高度

        image_w:輸入圖像的寬度

        pad_h:在輸入圖像的高度方向兩邊各增加pad_h個單位長度(因為有兩邊,所以乘以2)

        pad_w:在輸入圖像的寬度方向兩邊各增加pad_w個單位長度(因為有兩邊,所以乘以2)

        kernel_h:池化區域的高度

        kernel_w:區域的寬度

        stride_h:高度方向的滑動步長;

        stride_w:寬度方向的滑動步長。

        因此,N為輸出圖像大小的長寬乘積,也是卷積核在輸入圖像上滑動可截取的最大特征數。

 

 

三.卷積時參數的理解

卷積運算時總是有一個參數需要選擇,matlab中是shape,python中是border_mode

關於shape選項的說明;

當shape=full時,返回全部二維卷積結果,即返回c的大小為(ma+mb-1)x(na+nb-1)
    shape=same時,返回與a同樣大小的卷積中心部分
    shape=valid時,不考慮邊界補零,即只要有邊界補出的零參與運算的都舍去,返回c的大小為(ma-mb+1)x(na-nb+1)


免責聲明!

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



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