CNN基礎(chǔ)——卷積神經(jīng)網(wǎng)絡(luò)的組成
以圖像分類任務(wù)為例,在下表所示卷積神經(jīng)網(wǎng)絡(luò)中,一般包含5種類型的網(wǎng)絡(luò)層次結(jié)構(gòu):
W1×H1×3
W1×H1×3對應(yīng)原始圖像或經(jīng)過預(yù)處理的像素值矩陣,3對應(yīng)RGB圖像的通道;K表示卷積層中卷積核(濾波器)的個數(shù);W2× H2 為池化后特征圖的尺度,在全局池化中尺度對應(yīng)1×1;(W2H2K)是將多維特征壓縮到1維之后的大小,C對應(yīng)的則是圖像類別個數(shù)。
1 輸入層
輸入層(Input Layer)通常是輸入卷積神經(jīng)網(wǎng)絡(luò)的原始數(shù)據(jù)或經(jīng)過預(yù)處理的數(shù)據(jù),可以是圖像識別領(lǐng)域中原始三維的多彩圖像,也可以是音頻識別領(lǐng)域中經(jīng)過傅利葉變換的二維波形數(shù)據(jù),甚至是自然語言處理中一維表示的句子向量。以圖像分類任務(wù)為例,輸入層輸入的圖像一般包含RGB三個通道,是一個由長寬分別為H和W組成的3維像素值矩陣H× W?×3,卷積網(wǎng)絡(luò)會將輸入層的數(shù)據(jù)傳遞到一系列卷積、池化等操作進行特征提取和轉(zhuǎn)化,最終由全連接層對特征進行匯總和結(jié)果輸出。根據(jù)計算能力、存儲大小和模型結(jié)構(gòu)的不同,卷積神經(jīng)網(wǎng)絡(luò)每次可以批量處理的圖像個數(shù)不盡相同,若指定輸入層接收到的圖像個數(shù)為N,則輸入層的輸出數(shù)據(jù)為N×H×W×3。
2 卷積層
卷積層(Convolution Layer)通常用作對輸入層輸入數(shù)據(jù)進行特征提取,通過卷積核矩陣對原始數(shù)據(jù)中隱含關(guān)聯(lián)性的一種抽象。卷積操作原理上其實是對兩張像素矩陣進行點乘求和的數(shù)學(xué)操作,其中一個矩陣為輸入的數(shù)據(jù)矩陣,另一個矩陣則為卷積核(濾波器或特征矩陣),求得的結(jié)果表示為原始圖像中提取的特定局部特征。下圖表示卷積操作過程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷積(舍棄不能完整運算的邊緣部分)。
卷積神將網(wǎng)絡(luò)的計算公式為:
N=(W-F+2P)/S+1
其中N:輸出大小
W:輸入大小
F:卷積核大小
P:填充值的大小
S:步長大小
舉例:
nn.Conv2d(in_channels=3,out_channels=96,kernel_size=12,stride=4,padding=2)
in_channels=3:表示的是輸入的通道數(shù),由于是RGB型的,所以通道數(shù)是3.
out_channels=96:表示的是輸出的通道數(shù),設(shè)定輸出通道數(shù)的96(這個是可以根據(jù)自己的需要來設(shè)置的)
kernel_size=12:表示卷積核的大小是12x12的,也就是上面的 “F”, F=12
stride=4:表示的是步長為4,也就是上面的S, S=4
padding=2:表示的是填充值的大小為2,也就是上面的P, P=2
假如你的圖像的輸入size是256x256的,由計算公式知N=(256-12+2x2)/4+1=63,也就是輸出size為63x63x96
卷積層的參數(shù)計算:
卷積后feature map邊長:?outputSize =(originalSize + paddingX2 - kernelSize)/ stride + 1 (其中outputSize是卷積之后得到的feature map的邊長,originalSize是輸入圖的邊長,padding是填充的大小,kernelSize是卷積核的邊長,stride是步長)
卷積層的可訓(xùn)練的參數(shù)個數(shù):?trainNum = (outputSize X outputSize + 1) X kernelNum (其中kernelNum是卷積核的個數(shù),加1是因為每一個卷積核有一個bias參數(shù))
卷積層的連接數(shù):?connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
卷積層的神經(jīng)元個數(shù):?neuralNum = (outputSzie X outputSize) X kernelNum
3 激活層
激活層(Activation Layer)負責對卷積層抽取的特征進行激活,由于卷積操作是由輸入矩陣與卷積核矩陣進行相差的線性變化關(guān)系,需要激活層對其進行非線性的映射。激活層主要由激活函數(shù)組成,即在卷積層輸出結(jié)果的基礎(chǔ)上嵌套一個非線性函數(shù),讓輸出的特征圖具有非線性關(guān)系。卷積網(wǎng)絡(luò)中通常采用ReLU來充當激活函數(shù)(還包括tanh和sigmoid等)ReLU的函數(shù)形式如下公式所示,能夠限制小于0的值為0,同時大于等于0的值保持不變。
4 池化層
池化層又稱為降采樣層(Downsampling Layer),作用是對感受域內(nèi)的特征進行篩選,提取區(qū)域內(nèi)最具代表性的特征,能夠有效地降低輸出特征尺度,進而減少模型所需要的參數(shù)量。按操作類型通常分為最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它們分別提取感受域內(nèi)最大、平均與總和的特征值作為輸出,最常用的是最大池化。
池化操作沒有用于訓(xùn)練的參數(shù),只有兩個超參數(shù)Stride和kernel_size,過程與卷積操作類似,也是在輸入圖像上從左到右從上到下滑動,在滑動過程中,當核覆蓋在一個區(qū)域的時候,用這個區(qū)域的最大值作為結(jié)果,Stride和kernel_size一般來說相等。
下采樣層的參數(shù)計算:
下采樣后map的邊長:?outputSize =(originalSize + paddingX2 - kernelSize)/ stride + 1 (其中outputSize是卷積之后得到的feature map的邊長,originalSize是輸入圖的邊長,padding是填充的大小,kernelSize是卷積核的邊長,stride是步長)
下采樣層可訓(xùn)練的參數(shù)個數(shù):?trainNum = (1+ 1) X kernelNum (其中kernelNum是卷積核的個數(shù))
下采樣層的連接數(shù):?connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
下采樣層的神經(jīng)元個數(shù):?neuralNum = (outputSzie X outputSize) X kernelNum
5 全連接層
全連接層(Full Connected Layer)負責對卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)提取到的特征進行匯總,將多維的特征輸入映射為二維的特征輸出,高維表示樣本批次,低位常常對應(yīng)任務(wù)目標。
卷積神經(jīng)網(wǎng)絡(luò) 神經(jīng)網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。