CNN網絡簡單介紹
1.概述
卷積神經網絡(Convolutional Neural Network,CNN)是一種專門用于處理具有網格狀結構數據的深度學習模型。
? CNN網絡主要有三部分構成:卷積層、池化層和全連接層構成,其中卷積層負責提取圖像中的局部特征;池化層用來大幅降低運算量并特征增強;全連接層類似神經網絡的部分,用來輸出想要的結果。
特點:
CNN 網絡主要應用于視覺處理,通常位于神經網絡的前端(上游),通過卷積層和池化層自動提取圖像的局部和全局特征,生成緊湊且有區分度的表示,為后續網絡(如全連接層)進行分類或其他任務提供高效輸入,同時減少計算復雜度和參數量。
為什么會說減少參數量?
如果用全連接神經網絡處理圖片,每個像素點都會對應一組參數,因此參數量非常大;而使用卷積神經網絡時,通過卷積核的權重共享機制,一個卷積核就可以作用于整個圖像區域,從而大幅減少參數數量,同時提取局部特征。
2.卷積層
卷積層(Convolutional Layer是 CNN 的核心組成部分,主要作用是從輸入圖像中自動提取局部特征。通過卷積核在圖像上滑動,卷積層能夠捕捉邊緣、紋理、形狀等低級特征,并通過多層堆疊逐步抽象成更高級的語義特征。同時,卷積核的權重共享機制大幅減少了參數量,使網絡在保持空間結構信息的同時,提高了特征提取效率。
卷積核:卷積核是卷積運算過程中必不可少的一個“工具”,其本質上是一個的矩陣。
在定義卷積核時我們需要考慮:
- 卷積核的個數:卷積核的個數決定了輸出特征矩陣的通道數也就是
outfeature
的個數。 - 卷積核的大小(size):一般的卷積核大小為奇數×奇數,如3×3、5×5.
例如一個3*3的卷積核:
卷積運算:
卷積的過程是利用卷積核圖像上進行滑動計算,從左到右,從上往下,每滑動到一個位置,卷積核和圖像進行點對點的相乘并相加,最后得到一個新的值,將這個新值添加到特征圖中,整個圖片卷積結束后得到一個新的特征圖。
卷積的重要性在于它可以將圖像中的特征與卷積核進行卷積操作,從而提取出圖像中的特征。(類比:卷積核像一個小模板,它在圖像上滑動,輸出值越大,就表示該區域“越像”卷積核所關注的特征模式(例如邊緣方向或紋理)。)
應用Pytorch框架自定義卷積層:
from torch import nnclass MyNet(nn.module):def __init__(self):super(MyNet, self).__init__()self.conv = nn.Conv2d(in_channels=32, # 輸入通道out_channels=128, # 輸出通道kernel_size=(5, 5), # 卷積核大小stride=1, # 步長padding=0, # 填充bias=True)def forward(self,x):x = self.conv(x)return xmodel = MyNet()
model(img) # img為需要處理的圖片
- in_channels:輸入數據的通道數
- out_channels:輸出數據的通道數,這個參數決定了你有多少個卷積核。
- kernel_size:卷積核大小
- stride:卷積操作的步長,默認為1。
- padding:邊緣填充值,默認為0(不進行填充)
- bias:布爾值,是否設置偏置
注意:
- 每個卷積核得到一個新的特征圖,即有多少個卷積核就有多少個特征圖,多通道圖片卷積得到的新圖片為當前卷積核對每個通道卷積后按位相加得到的最終圖。
- 在傳入圖片時,數據格式為(N, C, H, W)。N表示批次數(樣本個數)、C表示通道數、H表示高、W表示寬。
特征圖大小(圖片尺寸)計算:
特征圖大小計算公式:
N=W?F+2PS+1
N=\frac{W-F+2P}{S}+1
N=SW?F+2P?+1
- W:輸入圖片的大小
- F:卷積核大小
- S:步長
- P:邊緣是否填充,填充為1,否則為0
- N:輸出圖片的大小
3.池化層
池化層通常緊跟在卷積層之后,用于下采樣和特征壓縮。
下采樣: 減少數據的空間或時間分辨率,保留主要信息同時壓縮數據量。
所以池化層的作用就是減少一定的數據量但同時保留重要的數據。
池化層的運算與卷積相似,他們都采用了滑動窗口的思想,通過對局部的數據進行處理輸出一個新的圖像。
池化層主要分為兩種——最大池化和平均池化。
應用Pytorch創建池化層:
pool = nn.MaxPool2d(kernel_size=3,stride=1,padding=0,dilation=1,return_indices=True
)out = pool(img)
kernel:池化窗口大小,int或tuple,如3表示窗口大小為3×3
stride:步長
padding:邊緣填充
dilation:池化窗口內部元素的間隔
return_indices:是否返回新圖像中的像素點在原圖像中的下標,最大池化使用。
- 最大池化
左側為輸入圖像,右側為輸出圖像。最大池化就是取局部區域的最大值作為新圖像像素點的像素值。最大池化在提取圖像中的紋理、形狀等方面具有很好的效果。
- 平均池化
將局部區域中的值取平均作為池化后的值,這樣可以得到整體特征的平均值。平均池化在提取圖像中的整體特征、減少噪聲等方面具有較好的效果。
優點:
- 降低特征圖的尺寸,減少計算量,提升模型運行效率。
- 池化操作可以帶來特征的平移、旋轉等不變性,這有助于提高模型對輸入數據的魯棒性。
- 池化層通常是非線性操作,可以增強網絡的表達能力,進一步提升模型的性能。
缺點:可能會丟失一些信息。
總結
- 降低特征圖的尺寸,減少計算量,提升模型運行效率。
- 池化操作可以帶來特征的平移、旋轉等不變性,這有助于提高模型對輸入數據的魯棒性。
- 池化層通常是非線性操作,可以增強網絡的表達能力,進一步提升模型的性能。
缺點:可能會丟失一些信息。
總結
? CNN 網絡通常位于神經網絡的前端(上游),主要由卷積層和池化層組成,用于自動提取圖像特征、減少計算量,并增強模型的魯棒性和表達能力,從而提升整體性能。
以上內容是博主學習深度學習的一些總結筆記,若文章中出現錯誤請及時指正博主,感謝瀏覽☆嚕~☆