filter map和卷積層的理解

       在一個卷積層中,過濾器所處理的節點矩陣的長和寬都是由人工指定,此節點矩陣的尺寸也稱之爲過濾器的尺寸。常用的過濾器尺寸有3*3或5*5。因爲過濾器處理的矩陣深度和當前層神經網絡的深度是一致的,所以雖然節點矩陣是三維的,但是過濾器的尺寸只需要指定兩個維度,即3*3*網絡深度或5*5*網絡深度。

    過濾器中另外一個需要人工指定的設置處理得到的單位節點矩陣的深度,此設置稱爲過濾器的深度(此深度=過濾器的個數=feature map的個數)。

    注意過濾器的尺寸指的是一個過濾器輸入節點矩陣的大小,而深度指的是輸出單位節點矩陣的深度。如圖1中,左側小矩陣的尺寸爲過濾器的尺寸,而右側單位矩陣的深度爲過濾器的深度。

 

out_1=Conv2d(input=image, filter=32, kernel_size=(3,3), strides=(1,1));//卷積層
       relu_out=relu(out_1);                                       //利用激活函數ReLU去線性化
       pool_out=MaxPool(relu_out, kernel_size=(2,2), strides=2);//最大池化降維
       很容易理解,上面的結果是一系列的具有32層深度的過濾器。我們不知道的是,該如何將具有3個信道的圖像精確地映射到這32層中!另外,我們也不清楚該如何應用最大池(max-pool)操作符。例如,是否一次性將最大池化應用到了所有的過濾層中以有效地生成一個單一的過濾映射?又或者,是否將最大池獨立應用於每個過濾器中,以產生相同的32層的池化過濾器?
       具體如何做的呢?
       一圖勝千言,下圖可以顯示上述代碼片段中所有的操作。

 

觀察上圖,可以看到最顯著的一點是,步驟1中的每個過濾器(即Filter-1、Filter-2……)實際上包含一組3個權重矩陣(Wt-R、Wt-G和WT-B)。每個過濾器中的3個權重矩陣分別用於處理輸入圖像中的紅(R)、綠(G)和藍(B)信道。在正向傳播期間,圖像中的R、G和B像素值分別與Wt-R、Wt-G和Wt-B權重矩陣相乘以產生一個間歇激活映射(intermittent activation
 map)(圖中未標出),然後將這3個權重矩陣的輸出(即3個間歇激活映射)相加以爲每個過濾器產生一個激活映射(activation map)。
       隨後,這些激活映射中的每一個都要經過激活函數ReLu去線性化,最後到最大池化層,而後者主要爲激活映射降維。最後,我們得到的是一組經過激活函數和池化層處理後的激活映射,現在其信號分佈在一組32個(過濾器的數量)二維張量之中(也具有32個feature map,每個過濾器會得到一個feature map)。
       來自卷積層的輸出經常用作後續卷積層的輸入。因此,如果我們的第二個卷積單元如下:
       conv_out_2 = Conv2d(input = relu_out,filters = 64)
       那麼框架就需要實例化64個過濾器,每個過濾器使用一組32個權重矩陣。
 

 

參考鏈接:https://blog.csdn.net/allenlzcoder/article/details/78739346

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章