深度學習零基礎入門(4)-卷積神經網絡架構

許久不見~
本節我們延續上一節的話題來看看卷積神經網絡的架構,看看具體的卷積、池化等操作


卷積神經網絡詳解:從基礎操作到整體架構

一、卷積操作:特征提取的核心

卷積是卷積神經網絡(CNN)的核心操作,靈感來源于人類視覺系統。在圖像處理中,卷積可表示為:

(I?K)(i,j)=∑m∑nI(i+m,j+n)?K(m,n)(I * K)(i,j) = \sum_{m}\sum_{n} I(i+m,j+n) \cdot K(m,n)(I?K)(i,j)=m?n?I(i+m,j+n)?K(m,n)

其中:

  • III 是輸入圖像矩陣
  • KKK 是卷積核(濾波器)
  • (i,j)(i,j)(i,j) 是輸出位置坐標

卷積過程圖解
在這里插入圖片描述

計算示例(左上角位置):
(0×0)+(1×1)+(3×2)+(4×3)=19(0×0) + (1×1) + (3×2) + (4×3) = 19(0×0)+(1×1)+(3×2)+(4×3)=19
簡單來說就是對應相乘然后求和

卷積核本質是特征檢測器,不同核可提取邊緣、紋理等特征:

  • 垂直邊緣檢測核:[10?110?110?1]\begin{bmatrix}1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1\end{bmatrix}?111?000??1?1?1??
  • 水平邊緣檢測核:[111000?1?1?1]\begin{bmatrix}1 & 1 & 1 \\ 0 & 0 & 0 \\ -1 & -1 & -1\end{bmatrix}?10?1?10?1?10?1??

至于特征是什么,你就當做是屬性或者本質來理解吧


二、步幅(Stride):控制計算密度

步幅定義卷積核每次移動的像素數。設步幅為SSS

  • S=1S=1S=1:滑動間隔1像素(輸出尺寸最大)
  • S=2S=2S=2:滑動間隔2像素(輸出尺寸減半)

步幅影響圖解

S=1時移動路徑:    S=2時移動路徑:
→→→→→            → → → 
↓↓             ↓   ↓
→→→→→            → → → 
↓↓
→→→→→

數學意義:步幅增加會降低特征圖分辨率,但能顯著減少計算量,適用于深層網絡。


三、填充(Padding):邊界信息保護

填充是在輸入圖像邊緣添加像素(通常為0),解決兩個核心問題:

  1. 邊界信息丟失(角落像素參與計算次數少)
  2. 輸出尺寸收縮

常用填充模式:

類型公式輸出尺寸特點
ValidP=0P=0P=0W?FS+1\frac{W-F}{S}+1SW?F?+1無填充,輸出縮小
SameP=F?12P=\frac{F-1}{2}P=2F?1?WWW輸入輸出同尺寸

填充量PPP的計算:
P=?F?12?P = \left\lfloor \frac{F-1}{2} \right\rfloorP=?2F?1??
其中FFF為卷積核尺寸

填充效果示例(3x3核,Same填充):

原始輸入:    填充后(P=1):
1 2 3       0 0 0 0 0
4 5 6   →   0 1 2 3 0
7 8 9       0 4 5 6 00 7 8 9 00 0 0 0 0

四、池化層:空間信息壓縮

池化層通過降采樣減少參數量,增強特征不變性。

1. 最大值池化(Max Pooling)

輸出(i,j)=max?m,n∈R輸入(i×S+m,j×S+n) \text{輸出}(i,j) = \max_{m,n \in \mathcal{R}} \text{輸入}(i×S+m, j×S+n) 輸出(i,j)=m,nRmax?輸入(i×S+m,j×S+n)

可以這樣來理解,在一個區域內挑選最大的

  • 在這里插入圖片描述

  • 歷史:1980年福島邦彥在Neocognitron首次提出,1998年LeNet-5正式應用

  • 特點:保留顯著特征,對噪聲魯棒

2. 平均池化(Average Pooling)

輸出(i,j)=1∣R∣∑m,n∈R輸入(i×S+m,j×S+n) \text{輸出}(i,j) = \frac{1}{|\mathcal{R}|} \sum_{m,n \in \mathcal{R}} \text{輸入}(i×S+m, j×S+n) 輸出(i,j)=R1?m,nR?輸入(i×S+m,j×S+n)
平均池化就是將這個區域內的值求平均數

  • 在這里插入圖片描述

  • 歷史:2012年AlexNet首次大規模應用,緩解過擬合

  • 特點:保留整體特征分布,平滑特征圖

池化過程圖解(2x2池化窗口,S=2):

輸入矩陣:        最大值池化:     平均池化:
[1 5 0 2]        [5  2]         [3.0  1.5]
[3 2 4 1]   →    [4  3]         [3.5  2.5]
[7 0 3 5]        [7  5]         [3.5  4.0]
[2 6 1 4]                          

在這里我們將池化的核叫做感受眼 池化只算一種操作而不是卷積網絡中的一層,但是它依舊會影響輸入輸出的特征圖大小


五、輸出特征圖計算通式

給定參數:

  • 輸入尺寸:W×H×DinW \times H \times D_{in}W×H×Din?
  • 卷積核尺寸:FH×FW×DinFH \times FW \times D_{in}FH×FW×Din?
  • 卷積核通道數:DDD
  • 步幅:SSS
  • 填充:PPP

輸出特征圖尺寸:通道數由卷積核的通道數決定
在這里插入圖片描述

計算示例

  • 輸入:224×224×3224 \times 224 \times 3224×224×3 圖像
  • 卷積核:7×7×37 \times 7 \times 37×7×3K=64K=64K=64
  • S=2S=2S=2P=3P=3P=3
  • 輸出:Wout=?(224?7+6)/2?+1=112W_{out} = \lfloor(224-7+6)/2\rfloor+1 = 112Wout?=?(224?7+6)/2?+1=112
  • 最終輸出:112×112×64112 \times 112 \times 64112×112×64

六、多通道卷積運算

多通道卷積是CNN處理彩色圖像的關鍵,運算過程分三步:

  1. 輸入結構DinD_{in}Din?通道輸入(如RGB三通道)
    輸入∈RW×H×Din \text{輸入} \in \mathbb{R}^{W \times H \times D_{in}} 輸入RW×H×Din?

  2. 卷積核結構:每個卷積核包含DinD_{in}Din?個通道的權重
    Kk∈RF×F×Din(k=1,2,...,K) K_k \in \mathbb{R}^{F \times F \times D_{in}} \quad (k=1,2,...,K) Kk?RF×F×Din?(k=1,2,...,K)

  3. 計算過程
    輸出k(i,j)=∑d=1Din(∑m=0F?1∑n=0F?1Id(i+m,j+n)?Kk(d)(m,n))+bk \text{輸出}_k(i,j) = \sum_{d=1}^{D_{in}} \left( \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I_d(i+m,j+n) \cdot K_k^{(d)}(m,n) \right) + b_k 輸出k?(i,j)=d=1Din??(m=0F?1?n=0F?1?Id?(i+m,j+n)?Kk(d)?(m,n))+bk?

多通道卷積示意圖

輸入通道(3通道)      卷積核組(2個核)
[ R ]               [ K1_R ] [ K2_R ]
[ G ]          *    [ K1_G ] [ K2_G ]  = 輸出特征圖(2通道)
[ B ]               [ K1_B ] [ K2_B ]

為什么會是這樣呢?對于輸入的3通道 ,每一個通道會和卷積核的一個通道進行卷積計算然后進行疊加,得到一個通道的輸出,卷積核有多少的通道就會進行多少次這樣的計算,因此由卷積核的通道(核的數量)決定本層的輸出通道數


七、卷積神經網絡整體架構

典型CNN包含以下層級結構:

1. 輸入層
  • 接收W×H×CW \times H \times CW×H×C張量
  • 預處理:歸一化、數據增強
2. 卷積塊(重復N次)

這一塊代碼你可能還看不懂,沒有關系,我們下一節具體來講解

# 典型卷積塊代碼實現
def conv_block(x, filters, kernel_size=3):x = Conv2D(filters, kernel_size, padding='same')(x)x = BatchNormalization()(x)x = ReLU()(x)return x
  • 卷積層:提取局部特征
  • 激活函數:引入非線性(常用ReLU:f(x)=max?(0,x)f(x)=\max(0,x)f(x)=max(0,x)
  • 批歸一化:加速訓練
3. 池化層
  • 空間降維:通常2×22\times22×2窗口,S=2S=2S=2
  • 位置:每1-2個卷積塊后
4. 全連接層
  • 特征整合:將3D特征展平為1D向量
    Flatten:RW×H×D→RN(N=W×H×D) \text{Flatten}: \mathbb{R}^{W\times H\times D} \to \mathbb{R}^{N} \quad (N=W\times H\times D) Flatten:RW×H×DRN(N=W×H×D)
  • 分類輸出:Softmax激活函數
5. 經典架構演進
網絡創新點深度Top-5錯誤率
LeNet-5 (1998)首個實用CNN架構7層-
AlexNet (2012)ReLU/Dropout/多GPU訓練8層16.4%
VGG (2014)3x3小卷積核堆疊16-19層7.3%
ResNet (2015)殘差連接解決梯度消失50-152層3.57%

現代CNN架構特征

  • 深度堆疊:16~100+層
  • 殘差連接:H(x)=F(x)+xH(x) = F(x) + xH(x)=F(x)+x
  • 瓶頸結構:1x1卷積降維
  • 注意力機制:通道/空間注意力
  • 輕量化設計:深度可分離卷積

八、端到端計算流程示例

以10x10 RGB圖像分類為例:

  1. 輸入層10×10×310 \times 10 \times 310×10×3
  2. 卷積層1:32個3×33\times33×3核,S=1,P=1 → 10×10×3210 \times 10 \times 3210×10×32
  3. 池化層1:2x2 MaxPooling, S=2 → 5×5×325 \times 5 \times 325×5×32
  4. 卷積層2:64個3×33\times33×3核,S=1,P=1 → 5×5×645 \times 5 \times 645×5×64
  5. 池化層2:2x2 MaxPooling, S=2 → 2×2×642 \times 2 \times 642×2×64
  6. 全連接層:Flatten → 256256256神經元
  7. 輸出層:Softmax → 類別概率

參數量計算:

  • 卷積層1:(3×3×3+1)×32=896(3×3×3+1)×32 = 896(3×3×3+1)×32=896
  • 卷積層2:(3×3×32+1)×64=18,496(3×3×32+1)×64 = 18,496(3×3×32+1)×64=18,496
  • 全連接層:(256+1)×10=2,570(256+1)×10 = 2,570(256+1)×10=2,570
  • 總計:21,962參數(傳統神經網絡需數百萬參數)

九、卷積神經網絡優勢
  1. 局部連接:每個神經元僅連接局部區域,大幅減少參數量
    參數量=(F×F×Din+1)×Dout \text{參數量} = (F \times F \times D_{in} + 1) \times D_{out} 參數量=(F×F×Din?+1)×Dout?

  2. 權值共享:同一卷積核在整張圖像滑動,增強泛化能力

  3. 平移不變性:池化操作使特征對位置變化魯棒

  4. 層次化特征

    • 淺層:邊緣/紋理
    • 中層:部件組合
    • 深層:語義對象

本介紹涵蓋卷積神經網絡核心組件及其數學原理,通過系統闡述,由基礎操作延伸至架構設計,結合公式推導和概念圖解,構建完整的知識體系。實際實現時需結合PyTorch/TensorFlow等框架,通過反向傳播優化卷積核權重。
So,我們下一節來看看經典的神經網絡的參數然后直接進行實戰練習吧~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917547.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言的控制語句

C的控制語句 控制語句是C語言中用于控制程序執行流程的結構。通過控制語句,可以根據條件執行不同的代碼塊,或者重復執行某些操作,從而實現復雜的邏輯和功能。掌握控制語句是編寫有效和高效C程序的關鍵。 1 條件控制 條件控制語句用于根據某些條件來決定程序的執行路徑。C語…

Mac電腦基本功能快捷鍵

1. 個性化桌面 將喜愛照片添加為桌面墻紙。前往“系統設置”,然后點按邊欄中的“墻紙”。點按“添加照片”,然后從文件或“照片”App選取一張照片。 2. 截屏 按下鍵盤上的Shift  Command ? 5,然后選取捕捉整個屏幕、App窗口或…

微算法科技(NASDAQ: MLGO)開發量子邊緣檢測算法,為實時圖像處理與邊緣智能設備提供了新的解決方案

圖像邊緣檢測是計算機視覺的核心任務,傳統算法(如 Sobel、Canny)依賴梯度計算與閾值分割,在處理高分辨率、復雜紋理圖像時面臨計算效率瓶頸。隨著量子計算技術的發展,利用量子態疊加與并行處理特性,微算法科…

斷點續傳Demo實現

基于我們的DownloadManager.swift代碼,讓我詳細解釋斷點續傳需要實現的核心功能: 斷點續傳的核心實現要素 1. 后臺會話配置 private func setupBackgroundSession() {let config URLSessionConfiguration.background(withIdentifier: "com.test.do…

《Leetcode》-面試題-hot100-子串

題目列表 560. 和為K的子數組 中等難度 leetcode鏈接 239 滑動窗口最大值 困難難度 leetcode鏈接 76 最小覆蓋子串 困難難度 leetcode鏈接 題目 (1)和為K的子數組 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 …

點擊彈框以外的區域關閉彈框

在 Vue 3 中&#xff0c;如果你想判斷點擊的目標是否在彈框內&#xff0c;可以通過以下步驟實現。這里我們將使用 ref 來引用彈框組件&#xff0c;并在點擊事件中進行判斷。 示例代碼 1. 創建彈框子組件 首先&#xff0c;創建一個名為 Modal.vue 的子組件。 <!-- Modal.vue …

00.Vue基礎入門【小白級別手把手!】

目錄 一、Vue介紹 二、創建Vue項目 nodeJs nvm版本管理 創建Vue項目 VS Code編輯器 三、.Vue文件結構說明 數據渲染 四、Vue項目目錄說明 main.ts文件說明 五、Vue官網文檔學習 一、Vue介紹 基礎介紹 Vue是一個前端Web框架&#xff0c;屬于單頁應用&#xff08;SPA&am…

將Varjo XR技術融入戰斗機訓練模擬器,有效提升模擬訓練沉浸感與效率

本周在Varjo總部&#xff0c;收到了一份令人興奮的禮物&#xff0c;一架由Dogfight Boss與varjo XR-4集成的訓練模擬器。這是一個專業級模擬器&#xff0c;專為高保真訓練和任務排練而設計&#xff0c;非常注重細節&#xff0c;提高了沉浸水平。為此Dogfight Boss的首席執行官L…

C# async await 實現機制詳解

一、async/await 異步編程實現機制 1.1 核心概念 async/await 是 C# 5.0 引入的語法糖&#xff0c;它基于**狀態機&#xff08;State Machine&#xff09;**模式實現&#xff0c;將異步方法轉換為編譯器生成的狀態機類。 1.2 編譯器轉換過程 當編譯器遇到 async 方法時&#xf…

Servlet 學習筆記

本文為記錄Servlet學習時的一些筆記和代碼 課程參考黑馬程序員 對于Java Web 學習的一個復習一 概述server applet 運行在服務器端的小程序 本質就是一個接口 定義java類被瀏覽器訪問到&#xff08;Tomcat識別&#xff09;的規則我們會自定義這樣一個類來實現復寫方法實現接口二…

【maven】倉庫配置

目錄 一、本地倉庫 二、私有倉庫 三、阿里云倉庫 一、本地倉庫 針對無外網、無maven私服&#xff0c;只有本地倉庫&#xff0c;進行maven項目開發。在maven的settings.xml中設置三項&#xff1a; 1、本地倉庫地址 默認在當前系統用戶下創建目錄&#xff1a;.m2/repository…

信息系統架構設計的系統性解析

一、信息系統架構設計??概念定義??&#xff1a;信息系統架構&#xff08;ISA&#xff09;是對系統組件、交互關系及環境約束的結構化抽象&#xff0c;確保業務目標與技術實現對齊。核心要素包括業務邏輯層、數據層、應用層和基礎設施層。??設計方法??&#xff1a;??T…

編譯舊版本的electron內核

我們的軟件產品使用的electron框架&#xff0c;electron框架是不斷更新的&#xff0c;但是我們的軟件太過龐大復雜&#xff0c;不敢輕易升級electron框架。Electron舊版本存在一些BUG和不合理的地方&#xff0c;需要去修復BUG或者不合理的地方。修復完BUG后&#xff0c;要對ele…

Elastic 9.1/8.19:默認啟用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry

作者&#xff1a;來自 Elastic Mark Doncov 今天&#xff0c;我們很高興宣布 Elastic 9.1 和 8.19 正式發布&#xff01; 是的&#xff0c;又有好消息 —— 我們將 8.x 系列最終延長到 8.19&#xff0c;這樣那些還在等待升級到 9.x 的用戶也能享受到許多新功能。 Elastic 9.1…

Redis面試精講 Day 8:Stream消息隊列設計與實現

【Redis面試精講 Day 8】Stream消息隊列設計與實現 文章標簽 Redis,消息隊列,Stream,面試技巧,分布式系統,后端開發 文章簡述 本文是"Redis面試精講"系列第8天&#xff0c;聚焦Redis 5.0引入的Stream消息隊列。文章深入解析Stream的核心概念與實現原理&#xff0…

【01】大恒相機SDK C++開發 —— 初始化相機,采集第一幀圖像、回調采集、關閉相機

文章目錄1 初始化相機&#xff0c;采集第一幀圖像2 回調方式采集圖像3 視頻教程1 初始化相機&#xff0c;采集第一幀圖像 #include <iostream> #include <GalaxyIncludes.h> using namespace std;int main() {//首先&#xff0c;對相機資源進行初始化IGXFactory::…

Windows下定位Mingw編譯的Qt程序崩潰堆棧

一、dump和pdb是什么 在Windows系統下&#xff0c;當我們寫的程序跑在客戶的機器上&#xff0c;因為一個bug&#xff0c;導致程序崩潰&#xff0c;我們該如何定位并修復這個bug呢&#xff1f; 有人會說記錄日志&#xff0c;即便有日志&#xff0c;也是不好定位的&#xff0c;因…

.net依賴注入框架 Autofac和MEF的對比

Autofac 默認需要顯式注冊每個類型&#xff0c;這是它與MEF在模塊化設計上的主要區別。以下是具體對比說明&#xff1a;1. Autofac 的基本注冊方式 Autofac 必須通過代碼明確注冊每個需要注入的類型&#xff08;除非使用特殊掃描機制&#xff09;&#xff1a; var builder new…

Python 使用 asyncio 包處理并 發(使用asyncio包編寫服務器)

使用asyncio包編寫服務器 演示 TCP 服務器時通常使用回顯服務器。我們要構建更好玩一點的示 例服務器&#xff0c;用于查找 Unicode 字符&#xff0c;分別使用簡單的 TCP 協議和 HTTP 協議實現。這兩個服務器的作用是&#xff0c;讓客戶端使用 4.8 節討論過的 unicodedata 模塊…

Node.js (Express) + MySQL + Redis構建項目流程

以下是使用 Node.js (Express) MySQL Redis 構建完整項目的詳細流程&#xff0c;涵蓋環境搭建、架構設計、核心代碼實現和部署優化&#xff1a;一、項目初始化 1. 創建項目目錄 mkdir my-project cd my-project npm init -y2. 安裝基礎依賴 npm install express mysql2 redis…