卷積神經(jīng)網(wǎng)絡(luò)三個結(jié)構(gòu)
神經(jīng)網(wǎng)絡(luò)(neural networks)的基本組成包括輸入層较坛、隱藏層瓤鼻、輸出層嗅绸。而卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn)在于隱藏層分為卷積層和池化層(pooling layer麻裁,又叫下采樣層)以及激活層。每一層的作用
- 卷積層:通過在原始圖像上平移來提取特征
- 激活層:增加非線性分割能力
- 池化層:通過特征后稀疏參數(shù)來減少學(xué)習(xí)的參數(shù)嗤锉,降低網(wǎng)絡(luò)的復(fù)雜度,(最大池化和平均池化)
為了能夠達(dá)到分類效果墓塌,還會有一個全連接層(FC)也就是最后的輸出層瘟忱,進(jìn)行損失計算分類。
卷積層
卷積層(Convolutional layer)苫幢,卷積神經(jīng)網(wǎng)絡(luò)中每層卷積層由若干卷積單元(卷積核)組成访诱,每個卷積單元的參數(shù)都是通過反向傳播算法最佳化得到的。
卷積運(yùn)算的目的是提取輸入的不同特征韩肝,第一層卷積層可能只能提取一些低級的特征如邊緣触菜、線條和角等層級,更多層的網(wǎng)路能從低級特征中迭代提取更復(fù)雜的特征哀峻。
卷積核(Filter)的四大要素
- 卷積核個數(shù)
- 卷積核大小
- 卷積核步長
- 卷積核零填充大小
卷積如何計算-大小
卷積核我們可以理解為一個觀察的人涡相,帶著若干權(quán)重和一個偏置去觀察,進(jìn)行特征加權(quán)運(yùn)算剩蟀。
注:上述要加上偏置
卷積核大小 ---> 11催蝗、33、5*5
通常卷積核大小選擇這些大小育特,是經(jīng)過研究人員證明比較好的效果丙号。這個人觀察之后會得到一個運(yùn)算結(jié)果,
那么這個人想觀察所有這張圖的像素怎么辦缰冤?那就需要這樣
卷積如何計算-步長
需要去移動卷積核觀察這張圖片犬缨,需要的參數(shù)就是步長。
假設(shè)移動的步長為一個像素棉浸,那么最終這個人觀察的結(jié)果以下圖為例:
5x5的圖片怀薛,3x3的卷積大小去一個步長運(yùn)算得到3x3的大小觀察結(jié)果
如果移動的步長為2那么結(jié)果是這樣
-
5x5的圖片,3x3的卷積大小去兩個步長運(yùn)算得到2x2的大小觀察結(jié)果
卷積如何計算-卷積核個數(shù)
那么如果在某一層結(jié)構(gòu)當(dāng)中涮拗,不止是一個人觀察乾戏,多個人(卷積核)一起去觀察。那就得到多張觀察結(jié)果三热。
- 不同的卷積核帶的權(quán)重和偏置都不一樣鼓择,即隨機(jī)初始化的參數(shù)
我們已經(jīng)得出輸出結(jié)果的大小有大小和步長決定的,但是只有這些嗎就漾,還有一個就是零填充呐能。Filter觀察窗口的大小和移動步長會導(dǎo)致超過圖片像素寬度!
卷積如何計算-零填充大小
零填充就是在圖片像素外圍填充一圈值為0的像素。
有兩種方式摆出,SAME和VALID
- SAME:越過邊緣取樣朗徊,取樣的面積和輸入圖像的像素寬度一致。
- VALID:不越過邊緣取樣偎漫,取樣的面積小于輸入人的圖像的像素寬度爷恳。
在Tensorflow當(dāng)中,卷積API設(shè)置”SAME”之后象踊,輸出高寬與輸入大小一樣(重要)
總結(jié)-輸出大小計算公式
最終零填充到底填充多少呢温亲?我們并不需要去關(guān)注,接下來我們利用已知的這些條件來去求出輸出的大小來看結(jié)果
通過一個例子來理解下面的公式
計算案例:
1杯矩、假設(shè)已知的條件:輸入圖像32321, 50個Filter栈虚,大小為55,移動步長為1史隆,零填充大小為1魂务。請求出輸出大小泌射?
H2 = (H1 - F + 2P)/S + 1 = (32 - 5 + 2 * 1)/1 + 1 = 30
W2 = (H1 - F + 2P)/S + 1 = (32 -5 + 2 * 1)/1 + 1 = 30
D2 = K = 50
所以輸出大小為[30, 30, 50]
2粘姜、假設(shè)已知的條件:輸入圖像32321, 50個Filter,大小為33熔酷,移動步長為1相艇,未知零填充。輸出大小3232纯陨?
H2 = (H1 - F + 2P)/S + 1 = (32 - 3 + 2 * P)/1 + 1 = 32
W2 = (H1 - F + 2P)/S + 1 = (32 -3 + 2 * P)/1 + 1 = 32
所以零填充大小為:11
多通道圖片如何觀察
如果是一張彩色圖片坛芽,那么就有三種表分別為R,G翼抠,B咙轩。原本每個人需要帶一個3x3或者其他大小的卷積核,現(xiàn)在需要帶3張3x3的權(quán)重和一個偏置阴颖,總共就27個權(quán)重活喊。最終每個人還是得出一張結(jié)果
卷積網(wǎng)絡(luò)API
tf.nn.conv2d(input, filter, strides=, padding=, name=None)
- 計算給定4-D input和filter張量的2維卷積
- input:給定的輸入張量,具有[batch,heigth,width,channel]量愧,類型為float32,64
- filter:指定過濾器的權(quán)重數(shù)量钾菊,[filter_height, filter_width, in_channels, out_channels]
- strides:strides = [1, stride, stride, 1],步長
- padding:“SAME”, “VALID”,使用的填充算法的類型偎肃,使用“SAME”煞烫。其中”VALID”表示滑動超出部分舍棄,“SAME”表示填充累颂,使得變化后height,width一樣大
小結(jié)
1滞详、已知固定輸出大小凛俱,反過來求出零填充,已知零填充料饥,根據(jù)步長等信息蒲犬,求出輸出大小
2、卷積層過濾器(卷積核)大小岸啡,三個選擇1x1原叮,3x3,5x5巡蘸,步長一般都為1篇裁,過濾器個數(shù)不定,不同結(jié)構(gòu)選擇不同赡若,
3、每個過濾器會帶有若干權(quán)重和1個偏置
激活函數(shù)
卷積網(wǎng)絡(luò)結(jié)構(gòu)采用激活函數(shù)团甲,自從網(wǎng)路得到發(fā)展之后逾冬。大家發(fā)現(xiàn)原有的sigmoid這些激活函數(shù)并不能達(dá)到好的效果,所以采取新的激活函數(shù)躺苦。
Relu
效果是什么樣的呢身腻?
playground演示不同激活函數(shù)作用
網(wǎng)址:http://playground.tensorflow.org/
- Relu
- Tanh
- sigmoid
為什么采取的新的激活函數(shù)
Relu優(yōu)點(diǎn)
- 有效解決梯度爆炸問題
- 計算速度非常快匹厘,只需要判斷輸入是否大于0嘀趟。SGD(批梯度下降)的求解速度速度遠(yuǎn)快于sigmoid和tanh
sigmoid缺點(diǎn)
- 采用sigmoid等函數(shù),計算量相對大愈诚,而采用Relu激活函數(shù)她按,整個過程的計算量節(jié)省很多。在深層網(wǎng)絡(luò)中炕柔,sigmoid函數(shù) 反向傳播 時酌泰,很容易就會出現(xiàn)梯度梯度爆炸的情況
激活函數(shù)API
tf.nn.relu(features, name=None)
- features:卷積后加上偏置的結(jié)果
- return:結(jié)果
池化層(Polling)
Pooling層主要的作用是特征提取,通過去掉Feature Map中不重要的樣本匕累,進(jìn)一步減少參數(shù)數(shù)量陵刹。Pooling的方法很多,通常采用最大池化
- max_polling:取池化窗口的最大值
-
avg_polling:取池化窗口的平均值
池化層計算
池化層也有窗口的大小以及移動步長欢嘿,那么之后的輸出大小怎么計算衰琐?計算公式同卷積計算公式一樣
計算:224x224x64,窗口為2,步長為2輸出結(jié)果炼蹦?
H2 = (224 - 2 + 20)/2 +1 = 112
w2 = (224 - 2 + 20)/2 +1 = 112
通常池化層采用 2x2大小羡宙、步長為2窗口
池化層API
tf.nn.max_pool(value, ksize=, strides=, padding=,name=None)
- 輸入上執(zhí)行最大池數(shù)
- value:4-D Tensor形狀[batch, height, width, channels]
- channel:并不是原始圖片的通道數(shù),而是多少filter觀察
- ksize:池化窗口大小掐隐,[1, ksize, ksize, 1]
- strides:步長大小辛辨,[1,strides,strides,1]
- padding:“SAME”, “VALID”,使用的填充算法的類型,默認(rèn)使用“SAME”
Full Connection層
前面的卷積和池化相當(dāng)于做特征工程斗搞,最后的全連接層在整個卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用指攒。