CNN 卷积神经网络(卷积、池化)长度、宽度、深度计算
生活随笔
收集整理的這篇文章主要介紹了
CNN 卷积神经网络(卷积、池化)长度、宽度、深度计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
卷積神經網絡說白了就是拿一堆小的矩陣去點乘(注意我說的是點乘,不是矩陣乘,這個很重要)一個大矩陣,最后得到局部信息。看圖(來源于網絡,只做說明用):
給出一個matlab求解代碼:
A1 = [0 0 0 0 0 0 0;0 0 1 1 0 2 0;0 2 2 2 2 1 0;0 1 0 0 2 0 0;0 0 1 1 0 0 0;0 1 2 0 0 2 0;0 0 0 0 0 0 0];A2 =[0 0 0 0 0 0 0;0 1 0 2 2 0 0;0 0 0 0 2 0 0;0 1 2 1 2 1 0;0 1 0 0 0 0 0;0 1 2 1 1 1 0;0 0 0 0 0 0 0];A3 =[0 0 0 0 0 0 0;0 2 1 2 0 0 0;0 1 0 0 1 0 0;0 0 2 1 0 1 0;0 0 1 2 2 2 0;0 2 1 0 0 1 0;0 0 0 0 0 0 0];w1 = [-1 1 00 1 00 1 1]; w2 = [-1 -1 00 0 00 -1 0] w3 = [0 0 -10 1 01 -1 -1]a = zeros(3,3);for i = 1:2:5for j = 1:2:5sum1 = sum(sum(A1(i:i+2,j:j+2).*w1));sum2 = sum(sum(A2(i:i+2,j:j+2).*w2));sum3 = sum(sum(A3(i:i+2,j:j+2).*w3));a((i+1)/2,(j+1)/2) = sum1 + sum2 + sum3 + 1;end end輸入一張矩陣表示的圖片,有3個通道(RGB),用兩個卷積核去卷積它,每一個卷積核又是3通道的,為什么卷積核從三通道變成了二通道,那是因為在3進行3通道卷積后,最后的卷積結果加和了,并且加上了偏置。還不懂?你算一下FilterW0那一層和InputVolume那一層對應元素相乘之后加偏置1是不是等于6,所有的東西依此類推就計算出最后的輸出矩陣了。
??下面來說一下卷積后的圖像的深度(D)、寬度(W)、長度(L)都編程多少了。首先有一個概念,叫padding,實際上在tensorflow和Keras中關于卷積的時候都有兩個方法可供選擇,叫valid和same,所謂valid就是兩邊不補0,SAME就是兩邊補相同數目的0。好了那么問題來了,兩邊步幾個0怎么計算啊,大家不要急這個是固定的。
?
- 3*3,padding大小一般為1,兩邊的就2*1=2
- 5*5,padding大小一般為2,兩邊的就2**=4
- 7*7,padding大小一般為3,兩邊的就3*2=6
??卷積以后的卷積核大小怎么求呢,首先確定卷積以后的矩陣深度(W)等于卷積核大小,也是是說一個卷積核生成一個feature_map(這個不懂的話自己去百度,其實圖中那個綠色的矩陣就是一個feature_map)。
??然后再來說說長度和寬度,這個玩意由于是正方形矩陣,其實是一回事,有個計算公式:
??是不是覺得好理解多了,轉化成符號:- s是stride,也就是步長
??其中W/H表示寬度/長度,P表示單邊(畫重點單邊)補全數,K代表卷積核的大小(比如5*5就是5)。好了又有一個問題出來了,為啥要加1呢,這個你就這么理解吧 你算1-9之間有幾個數是不是9-1+1共9個數啊。
?
?
總結
以上是生活随笔為你收集整理的CNN 卷积神经网络(卷积、池化)长度、宽度、深度计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 : remove,pop
- 下一篇: Matlab ANN人工神经网络 val