[監督式]卷積神經網絡(CNN)

2018-12-14  本文已影响0人  RJ阿杰

卷積神經網絡(Convolutional Neural Networks)

下面簡單比較一下DNN與CNN,Affine為全連接層。

DNN
CNN

仿射(Affine)的意思是前面一層中的每一個神經元都連接到當前層中的每一個神經元,ReLU層只是把做完convolution後的值都經過ReLU function,將0以下的值都轉為0。

卷積層(conv)

卷積運算

卷積運算是不需要固定輸入或輸出的,輸入不同尺寸的圖片不需要改變訓練的權重,但會產生不同尺寸的輸出,但如果後面接上Affine層那麼conv就必須固定輸出尺寸,也就必須固定輸入的圖片大小了。
雖然卷積運算是不需要固定輸入或輸出,但也不能輸入過大的輸入尺寸,需要考慮顯存夠不夠大,前向傳播會把計算結果存下來給反向傳播使用(float32的101281283輸入經過conv-->106464256這樣就佔了將近42M了,另外還要考慮weight、bias、grad、optimizers)。
若要接上Affine層又需要不同尺寸的圖片輸入,可以使用SPP(Spatial Pyramid Pooling 空間金字塔池化)。

  1. 我們將filter放置在input的左上角,每個filter與它對應到的input相乘後做加總,當作輸出Matrix的其中一個值。
  2. 然後做move,移動的大小稱為stride(步幅),先往左到底後退回最左再往下,依序執行直到filter移動到右下角。
  3. 換另外一個filter重複前兩步驟直到filter全部運算完成。

註:執行過Convolution後的output尺寸會變小,層數會等於filter數,例如input大小為(6,6),而filter大小為(3,3),則output大小為(4,4)。

Convolution與pooling都可以轉成col(im2col)優化運算

池化(pooling)

池化(pooling)有最大池化(max pooling)、最小池化(min pooling)、平均池化(average pooling)等,pooling的大小也是可以自己調整的,下面用max pooling作為例子。

CNN特性

CNN的學習出來每一層的濾鏡轉換成圖像可能會是紋理、邊界、結構等等 CNN共用權重(weight)減少參數

代表性架構

transpose convolution(轉置卷積)

up-convolution

卷積尺寸計算

OH、OW(輸出高度及寬度),IH、IW(輸入高度及寬度),FH、FW(濾鏡寬度及高度),S(stride步數),P(padding尺寸)。
OH = \frac{IH+2P-FH}{S} + 1
OW =\frac{IW+2P-FW}{S} + 1

tensorflow算法

推薦閱讀:
https://zhuanlan.zhihu.com/p/50573160
https://ithelp.ithome.com.tw/articles/10188326?sc=pt
https://zhuanlan.zhihu.com/p/31988761

參考李宏毅老師ML課程

上一篇下一篇

猜你喜欢

热点阅读