卷積神經網絡與人工神經網絡關系與區別
概念
卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡(Artificial Neural Network, ANN)的一種特殊形式,兩者在核心思想和基礎結構上存在關聯,但在設計目標、網絡結構和應用場景上有顯著差異。
結構
卷積神經網絡對比人工神經網絡引入卷積層、池化層等專用層,卷積層通過局部連接和權值共享提取局部特征,池化層降低數據維度
應用領域?
ANN??:廣泛用于分類、回歸、預測等任務,如金融風險評估、文本分類
CNN??:專精于計算機視覺(圖像分類、目標檢測)、語音識別和自然語言處理(如文本分類)等領域
圖像的概念
圖像的相關概念:
- ??Height (H)??:圖像高度,單位像素
- ??Width (W)??:圖像寬度,單位像素
- ??Channels (C)??:顏色通道數,單位“個”
- ??RGB圖像??:3通道(紅、綠、藍),每個通道值范圍0(黑)~255(白)
- ??灰度圖像??:1通道(0~255)
- ??二值圖像??:1通道(0或1)
Numpy表示:形狀:(Height, Width, Channels)
PyTorch表示:形狀:(Channels, Height, Width)
圖像的加載
了解了圖像的概念后,圖像的加載就是由一個三維矩陣或者三個三維矩陣來進行表示:
矩陣的值就是像素的位置以及像素的色彩
圖像加載的3個api:
imread():?讀取圖片像素等信息
imshow()? 根據像素等信息畫圖
imsave()? 保存圖片
CNN卷積神經網絡介紹
卷積神經網絡可以簡單理解為包含卷積層和池化層的神經網絡模型,主要用于圖形方面
組成及作用
輸入層,卷積層,激勵層,池化層,全連接層
卷積層:提取圖像特征圖
????????濾波器/卷積核(filter):帶有共享參數的神經元,有多少濾波器就是有多少個神經元
????????卷積基本計算
?? ?????????根據卷積核大小對特征圖進行點乘運算
?? ?????????點乘運算結果=新特征圖1個特征值
????????
????????Padding(填充)
????????通過上面的卷積計算過程,最終的特征圖比原始圖像小很多,如果想要保持經過卷積后的圖像大小不變, 可以在原圖周圍添加 Padding 來實現。
Padding(填充)操作是一種用于在輸入特征圖的邊界周圍添加額外像素(通常是零)。
????????Stride(步長)
????????Stride(步長)指的是卷積核在圖像上滑動時的步伐大小,即每次卷積時卷積核在圖像中向右(或向下)移動的像素數。步長直接影響卷積操作后輸出特征圖的尺寸,以及計算量和模型的特征提取能力。
????????
????????多通道卷積計算
????????實際中的圖像都是多個通道組成,多通道卷積計算方法如下:
- 當輸入有多個通道(Channel), 例如 RGB 三個通道, 此時要求卷積核需要擁有相同的通道數(圖像有多少通道,每個卷積核就有多少通道).
- 每個卷積核通道與對應的輸入圖像的各個通道進行卷積.
- 將每個通道的卷積結果按位相加得到最終的特征圖.
具體操作如下圖:padding補0,步長為1,通道為3
????????
?????????特征圖大小
輸出特征圖的大小與以下參數息息相關:
-
size: 卷積核/過濾器大小,一般會選擇為奇數,比如有
1*1
,3*3
,5*5
-
Padding: 零填充的方式
-
Stride: 步長
那計算方法如下圖所示:
-
輸入圖像大小: W x W
-
卷積核大小: F x F
-
Stride: S
-
Padding: P
-
輸出圖像大小: N x N
卷積層API介紹
conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
"""
參數說明:
in_channels: 輸入通道數,RGB圖片一般是3
out_channels: 輸出通道,也可以理解為卷積核kernel的數量
kernel_size:卷積核的高和寬設置,一般為3,5,7...
stride:卷積核移動的步長
?? ?整數stride:表示在所有維度上使用相同的步長 stride=2 表示在水平和垂直方向上每次移動2個像素
?? ?元組stride: 允許在不同維度上設置不同的步長 stride=(2, 1) 表示在水平方向上步長為2,在垂直方向上步長為1
padding:在四周加入padding的數量,默認補0
?? ?padding=0:不進行填充。
?? ?padding=1:在每個維度上填充 1 個像素(常用于保持輸出尺寸與輸入相同 padding=輸入形狀大小-輸出形狀大小)。
?? ?padding='same'(從 PyTorch 1.9+ 開始支持):讓輸出特征圖的尺寸與輸入保持一致。PyTorch會自動計算需要的填充量。stride必須等于1,不支持跨行,因為計算padding時可能出現小數
?? ?padding=kernel_size-1:Full Padding 完全填充
"""
池化層:降維(只在H,W上降維,與神經元無關)
池化層Pooling主要目的是降低維度,從而減少計算了,減少內存消耗,并提高模型的魯棒性
魯棒性(Robustness),又稱健壯性或穩健性,是系統在面臨內部結構變化、外部環境擾動或不確定性因素時,仍能維持其核心功能穩定運行的能力
池化層的計算
有點類似卷積層計算,但沒有神經元參與
最大池化(Max Pooling) :通過池化窗口進行最大池化,取窗口中的最大值作為輸出
?平均池化(Avg Pooling) :取窗口內的所有值的均值作為輸出
Padding(填充)
Stride(步長
?
多通道池化計算
在處理多通道輸入數據時,池化層對每個輸入通道分別池化,而不是像卷積層那樣將各個通道的輸入相加。這意味著池化層的輸出和輸入的通道數是相等。
池化只在寬高維度上池化,在通道上是不發生池化(池化前后,多少個通道還是多少個通道)
?