1. 程式人生 > >深度學習中卷積和池化的一些總結

深度學習中卷積和池化的一些總結

最近完成了hinton的深度學習課程的卷積和池化的這一章節了,馬上就要結束了。這個課程的作業我寫的最有感受,待我慢慢說來。

1:裡面有幾個理解起來的難點,一個是卷積,可以這麼來理解。


這幅圖是對一個5*5的矩陣A進行3*3的矩陣B的卷積,那麼就從最上角到右下角,生成卷積之後的矩陣的大小是(5-3+1)*(5-3+1)的矩陣,生成之後的矩陣的元素值,是之前的兩個矩陣對應元素的乘積之和,這個在matlab中有現成的命令,但是用之前需要注意下,比如在圖中這樣的B的話要首先進行B中元素左右和上下的對調才可以滿足右側矩陣的結果。這個是matlab中進行卷積計算的命令要求的,並且這個命令還有第三個引數,如圖中使用的是valid引數值,具體的用法還請doc來了解吧。

2:說下池化,其實池化很容易理解,先看圖:


比如上方左側矩陣A是20*20的矩陣要進行大小為10*10的池化,那麼左側圖中的紅色就是10*10的大小,對應到右側的矩陣,右側每個元素的值,是左側紅色矩陣每個元素的值得和再處於紅色矩陣的元素個數,也就是平均值形式的池化。

3:上面說了下卷積和池化,再說下計算中需要注意到的。在程式碼中使用的是彩色圖,彩色圖有3個通道,那麼對於每一個通道來說要單獨進行卷積和池化,有一個地方尤其是進行卷積的時候要注意到,隱藏層的每一個值是對應到一幅圖的3個通道穿起來的,所以分3個通道進行卷積之後要加起來,正好才能對應到一個隱藏層的神經元上,也就是一個feature上去。

ps:在做這個實驗的過程中,遇到了個2B的問題。我的程式碼中對convolution和pooling的check都過去了,但是準確率只有25%,反正中間使用了很多方法來找我的錯誤,最後都沒找到,最終和同學的程式碼對比,一個檔案一個檔案的替換來跑(為了快速找到問題,把資料規模以及隱藏層的個數都調小了的),最終發現是池化的時候的問題,我把問題原因貼在這裡,在池化的過程中,程式碼應該是這樣子的:


而我寫成了(注意紅色部分)


但是這個程式碼被check過了沒問題,我去看了下check的程式碼,這個程式碼是給出的:


也就是這個測試矩陣的features為1,numImages也是1,所以在我的程式碼中這個問題正好被隱藏掉了,導致我的check是顯示congratulations的,因為也導致我就壓根沒想到是這個地方錯誤的。。

以後變數名一定要注意,不要弄如此類似的了,一不小心就搞錯了,還有不要太相信這個裡面的check的程式碼了,有錯誤還是多仔細檢查每一個步驟,並且check的程式碼起碼也要具備共性才有說服力!