{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

如何理解卷積神經網絡里卷積過濾器的深度問題?

zhangke3016zhangke3016 回答3 收藏1
收藏問題

3條回答

Zoom

Zoom

回答于2022-06-22 19:47

我們通??吹降木矸e過濾器示意圖是這樣的:

(圖片來源:cs231n)

這其實是把卷積過濾器“壓扁”了,或者說“拍平”了。比如,上圖中粉色的卷積過濾器是3x3x3,也就是長3寬3深3,但是示意圖中卻畫成二維——這是省略了深度(depth)。

實際上,卷積過濾器是有深度的,深度值和輸入圖像的深度相同。也正因為卷積過濾器的深度和輸入圖像的深度相同,因此,一般在示意圖中就不把深度畫出來了。如果把深度也畫出來,效果大概就是這樣:

(圖片來源:mlnotebook)

如前所述,卷積過濾器的深度和輸入圖像的深度相同,都是3。

順便說下,輸入圖像深度為3,是因為輸入圖像是彩色圖像,深度為3,分別為R、G、B值。

作為對比,灰度圖像的卷積過濾器是這樣的(真2D):

(圖片來源:mlnotebook)

總之,卷積過濾器的深度和輸入數據的深度保持一致就可以了。

評論0 贊同0
  •  加載中...
Jioby

Jioby

回答于2022-06-22 19:47

濾波器是一種3維結構(濾波器的概念其實就是層),它由多個卷積核組成,所以具有深度。這里的深度是對于通道而言,比如彩色圖像是3通道,黑白圖像是1通道,所以彩色圖像的深度是3,黑白是1。當輸入C*H*W的圖像時(H:長,W:寬,C:通道數),那么濾波器如何對這張圖像進行特征提取呢?就是用每個卷積核和圖像的每個通道的空域進行計算。由于輸入了C通道的圖像,所以為了所有通道都能參與進來,所以需要C個卷積核,也就是說1個濾波器的深度和輸入圖像的深度是相同的。C個卷積核一一對應著C個通道,計算出了C個結果后,通過一定的機制融合,最終1個濾波器輸出了1個結果。當然,卷積操作會有多個濾波器參與,這樣就可以提取到不同尺度的特征。

簡單來說,濾波器的深度就是卷積核的數量,值相等于輸入數據的通道數。

評論0 贊同0
  •  加載中...
gecko23

gecko23

回答于2022-06-22 19:47

謝邀!


什么是卷積神經網絡?

它們基本上只是使用卷積層的神經網絡,即基于卷積數學運算的Conv層。 Conv圖層由一組濾鏡組成,你可以將其看作是數字的二維矩陣。 這里有一個例子3x3過濾器:

我們可以使用一個輸入圖像和一個過濾器通過將過濾器與輸入圖像進行卷積來生成一個輸出圖像。這包括

  1. 將過濾器覆蓋在圖像的某個位置上。
  2. 在過濾器中的值與其在圖像中的對應值之間執行元素級乘法。
  3. 總結所有元素產品。這個和是輸出圖像中目標像素的輸出值。
  4. 對所有位置重復。

旁注:我們(以及許多CNN實現)實際上在技術上使用的是互相關而不是卷積,但它們做的幾乎是一樣的。我不會在這篇文章中詳細討論它們之間的區別,因為這并不重要。

這四步描述有點抽象,我們來做個例子??聪逻@個微小的4x4灰度圖像和這個3x3濾鏡:

圖像中的數字表示像素強度,其中0為黑色,255為白色。我們將卷積輸入圖像和過濾器產生一個2x2輸出圖像:

首先,讓我們將濾鏡疊加在圖片的左上角:

接下來,我們在重疊圖像值和過濾器值之間執行逐元素乘法。 以下是結果,從左上角開始向右,然后向下:

接下來,我們總結所有的結果。這是很容易:

最后,我們將結果放入輸出圖像的目標像素中。由于我們的過濾器覆蓋在輸入圖像的左上角,我們的目標像素是輸出圖像的左上角像素:

我們做同樣的事情來生成輸出圖像的其余部分:

3.1這有什么用?

讓我們縮小一下,在更高的層次上看這個。將圖像與過濾器進行卷積會做什么?我們可以從我們一直使用的例子3x3過濾器開始,它通常被稱為垂直Sobel過濾器:

下面是一個垂直Sobel過濾器的例子:

同樣,還有一個水平Sobel過濾器:

看發生了什么?Sobel過濾器是一種邊緣檢測器。垂直Sobel過濾器檢測垂直邊緣,水平Sobel過濾器檢測水平邊緣。輸出圖像現在很容易解釋:輸出圖像中的亮像素(高值像素)表示在原始圖像中有一個強邊緣。

你能看出為什么邊緣檢測圖像可能比原始圖像更有用嗎? 回想一下我們的MNIST手寫數字分類問題。 在MNIST上訓練的CNN可以尋找數字1,例如,通過使用邊緣檢測過濾器并檢查圖像中心附近的兩個突出的垂直邊緣。 通常,卷積有助于我們查找特定的本地化圖像特征(如邊緣),我們可以在以后的網絡中使用。

3.2填充

還記得以前將4x4輸入圖像與3x3濾波器卷積得到2x2輸出圖像嗎?通常,我們希望輸出圖像與輸入圖像的大小相同。為此,我們在圖像周圍添加零,這樣我們就可以在更多的地方覆蓋過濾器。一個3x3的過濾器需要1像素的填充:

這稱為"相同"填充,因為輸入和輸出具有相同的尺寸。 不使用任何填充,這是我們一直在做的,并將繼續為這篇文章做,有時被稱為"有效"填充。

3.3 Conv層(Conv Layers)

現在我們知道了圖像卷積是如何工作的以及它為什么有用,讓我們看看它在CNN中的實際應用。如前所述,CNN包括conv層,它使用一組過濾器將輸入圖像轉換為輸出圖像。conv層的主要參數是它擁有的過濾器的數量。

對于MNIST CNN,我們將使用一個帶有8個過濾器的小conv層作為網絡的初始層。這意味著它將把28x28的輸入圖像轉換成26x26x8的容量:

提醒:輸出是26x26x8,而不是28x28x8,因為我們使用了有效的填充,這將輸入的寬度和高度降低了2。

conv層中的4個過濾器每個都產生一個26x26的輸出,因此它們疊加在一起構成一個26x26x8。所有這些都是因為3×3(過濾器大小) × 8(過濾器數量)= 72個權重!

3.4實施卷積

是時候把我們學到的東西寫進代碼里了!我們將實現conv層的前饋部分,它負責將過濾器與輸入圖像進行卷積以生成輸出卷。為了簡單起見,我們假設過濾器總是3x3(這并不是真的,5x5和7x7過濾器也很常見)。

讓我們開始實現一個conv層類:

Conv3x3類只接受一個參數:過濾器的數量。在構造函數中,我們存儲過濾器的數量,并使用NumPy的randn()方法初始化一個隨機過濾器數組。

注意:如果初始值過大或過小,訓練網絡將無效。

接下來,實際的卷積:

iterate_regions()是一個輔助發生器的方法,收益率為我們所有有效3 x3的圖像區域。這對于以后實現該類的向后部分非常有用。

上面突出顯示了實際執行卷積的代碼行。讓我們來分解一下:

  1. 我們有im_region,一個包含相關圖像區域的3x3數組。
  2. 我們有self.filters,一個3d數組。
  3. 我們做im_region * self.filters,它使用numpy的廣播機制以元素方式乘以兩個數組。 結果是一個3d數組,其尺寸與self.filters相同。
  4. 我們np.sum()上一步的結果使用axis =(1,2),它產生一個長度為num_filters的1d數組,其中每個元素包含相應過濾器的卷積結果。
  5. 我們將結果分配給輸出[i,j],其中包含輸出中像素(i,j)的卷積結果。

對輸出中的每個像素執行上面的序列,直到得到最終的輸出卷為止!讓我們測試一下我們的代碼:

目前看起來不錯。

注意:在Conv3x3實現中,為了簡單起見,我們假設輸入是一個2d numpy數組,因為MNIST圖像就是這樣存儲的。這對我們有用,因為我們使用它作為我們網絡的第一層,但大多數cnn有更多的Conv層。如果我們要構建一個更大的網絡,需要多次使用Conv3x3,那么我們必須將輸入設置為3d numpy數組。


更多有關人工智能的資訊、深度報道、采訪歡迎關注AI中國,無論你是小白還是大神,你想要的這里都有!

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<