0506
卷積神經網絡
傳統神經網絡與卷積神經網絡的對比
組成
Input –conv –relu – pool – FC
輸入層
卷積層
激活函數
池化層
全連接層
卷積核 即 濾波器 也就是權重參數
32-5+1=28
卷積核的大小必須要與輸入層的通道數相同 32*32*3 卷積核就是5*5*3 使用6個卷積核 得到結果就是 28*28*6 所以 第二次卷積時 卷積核就是5*5*6 使用10個卷積核 結果就是24*24*10
基本剛開始的卷積操作只能提取一些簡單的特徵,邊緣,線條,等等
卷積核在輸入層上進行滑動
卷積核就是w 對應 x 也是有三通道
F11(X11)=W11X11 = 0
F12(X12)=W12X12 = 2
F13(X13)=W13X13 = 0
F=F11+F12+F13+b0 = 0+2+0+1=3 即提取出的第一個特徵值
然後開始滑動
可以看到輸入層是5*5*3,有2個卷積核,每個卷積核爲3*3*3,所以卷積完可以得到如圖綠色框圖 3*3*2
步長 stride
謹慎選擇 不能太大不能太小
小了,特徵提取更豐富,但是效率不高
大了,會漏掉某些特徵點
Padding
可以看到在卷積過程中,隨着步長stride設定,最左上角的邊緣點只利用了一次,但是標記的2號位置,卻被利用了2次,所以爲了讓邊緣點利用率更高,多次利用,選擇在外圍加一層0,使得邊緣點不再是邊緣點
Pad 通常選取就是 (filter_size-1)/2 filter_size就是滑動窗口的大小,也就是卷積核的h或w
計算輸出的shape
假設
輸入(h,w) 7*7
Filter(卷積核) 3*3
Padding 1 沒有設置時padding爲0
Stride 1
W也是一樣
深度爲Filter的個數
參數共享,權值共享
pooling層
下采樣,降採樣操作
也需要指定filter大小 和 步長
對卷積層提取到的特徵圖feature map 進行壓縮,降維
Pooloing 中沒有權重參數參與
Mean pooling 平均池化
Max pooling 最大池化
基本上每次卷積完都要加上非線性的變換 conv+relu ,也就是激活函數,現在常用relu函數
一般實際中,輸入x 格式是 X[N,C,H,W]
N 就是batch 的編號
C 就是chnnal 通道
H 就是高
W 就是寬
python區別之[:j]和[:,j]或者雙冒號[::],python冒號在數組和矩陣使用
https://blog.csdn.net/xinjieyuan/article/details/81429048
比較詳細
保留第一個維度所有元素,第二維度元素保留到j”這句話不容易理解 建議換個通俗易懂的,比如: X[:,0]就是取矩陣X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素。 X[:,m:n]即取矩陣X的所有行中的的第m到n-1列數據,含左不含右。 X[0,:]就是取矩陣X的第0行的所有元素,X[1,:]取矩陣X的第一行的所有元素。
卷積神經網絡的前向傳播
這裏的 :3 :3 意思是從邊緣開始,從0開始到3 取了3*3 的一塊 進行卷積
卷積完之後,根據步長stride爲2 ,可以知道,先是橫向滑動了2個位置,所以(0+2):(3+2),:3即 2:5 , :3 意思就是橫着從第2個位置到第5個位置,豎着因爲還沒開始上下滑動,所以還是從0到3 還是3*3 的卷積
Out[0,0,0] 第一個0是第一個卷積核 卷積出來的意思,就是feature map的第一個通道,也可以理解爲第一個卷積出來的feature map 第二個0 第三個0 就是第一行第一列的意思
如 Out[2,0,1] 就是第三個feature map 的第一行第二列
反向傳播原理
Pooling的反向傳播
存在權重參數的地方
Python3中// 和/區別
" / "表示浮點數除法,返回浮點float結果;" // "表示整數除法,返回一個不大於" / "計算結果的最大整數int,特別注意如果其中一個操作數位負數,則結果必爲負數。
如:
a = 5/3
b = 5//3
c = -5/3
d = -5//3
print(a,b,c,d,sep=",")
輸出結果:1.6666666666666667,1,-1.6666666666666667,-2