LeNet5 神經網絡的參數解析和圖片尺寸解析

1.LeNet-5?神經網絡

以下是針對?LeNet-5?神經網絡的詳細參數解析和圖片尺寸變化分析,和原始論文設計,通過分步計算說明各層的張量變換過程。

經典的 LeNet-5架構簡化版(原始論文輸入為 32x32,MNIST 常用 28x28 需調整)。完整結構如下:

  • 網絡結構
    輸入 → Conv1 → 激活/池化 → Conv2 → 激活/池化 → 展平 → FC1 → FC2 → FC3 → 輸出

  • 適用場景
    經典的小型 CNN,適合處理低分辨率圖像分類任務(如 MNIST、CIFAR-10)。

class LeNet5(nn.Module):def __init__(self):super(LeNet5, self).__init__()self.conv1 = nn.Conv2d(1, 6, 5)      # C1: 輸入1通道,輸出6通道,5x5卷積self.pool1 = nn.AvgPool2d(2, 2)       # S2: 2x2平均池化self.conv2 = nn.Conv2d(6, 16, 5)     # C3: 輸入6,輸出16,5x5卷積self.pool2 = nn.AvgPool2d(2, 2)       # S4: 2x2平均池化self.fc1 = nn.Linear(16*5*5, 120)    # C5: 全連接層self.fc2 = nn.Linear(120, 84)        # F6: 全連接層self.fc3 = nn.Linear(84, 10)         # 輸出層def forward(self, x):x = F.relu(self.conv1(x))  # 卷積 + ReLU 激活x = F.max_pool2d(x, 2)      # 2x2 最大池化x = F.relu(self.conv2(x))x = F.max_pool2d(x, 2)x = x.view(-1, 16*5*5)      # 展平特征圖x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)             # 輸出層(通常不加激活函數)return x

1.2. 定義卷積層

定義
輸入通道是指輸入數據中獨立的“特征平面”數量。對于圖像數據,通常對應顏色通道或上一層的特征圖數量。

self.conv1 = nn.Conv2d(1, 6, 5) ? ?# 第一層卷積
self.conv2 = nn.Conv2d(6, 16, 5) ? # 第二層卷積nn.Conv2d 參數說明conv1:
輸入通道數 1(適用于單通道灰度圖,如 MNIST)。
輸出通道數 6(即 6 個卷積核,提取 6 種特征)。
卷積核大小 5x5。conv2:
輸入通道數 6(與 conv1 的輸出一致)。
輸出通道數 16(更深層的特征映射)。
卷積核大小 5x5。作用
通過卷積操作提取圖像的空間特征(如邊緣、紋理等),通道數的增加意味著學習更復雜的特征組合。每個輸出通道由一組卷積核生成:
如果輸出通道數為?6,則會有?6?個不同的卷積核(每個核的尺寸為?5x5,在單輸入通道下),分別提取不同的特征。輸出通道的維度:
輸出數據的形狀為?(batch_size, output_channels, height, width)。例如:
nn.Conv2d(3, 16, 5)  # 輸入通道=3(RGB),輸出通道=16
該層會使用?16?個卷積核,每個核的尺寸為?5x5x3(因為輸入有 3 通道)。每個核在輸入數據上滑動計算,生成 1 個輸出通道的特征圖,最終得到 16 個特征圖。

?1.3定義全連接層


self.fc1 = nn.Linear(16*5*5, 120)  # 第一個全連接層
self.fc2 = nn.Linear(120, 84)      # 第二個全連接層
self.fc3 = nn.Linear(84, 10)       # 輸出層nn.Linear 參數說明fc1:
輸入維度 16*5*5(假設卷積后特征圖尺寸為 5x5,共 16 個通道,展平后為 400 維)。
輸出維度 120(隱藏層神經元數量)。fc2:
輸入維度 120,輸出維度 84(進一步壓縮特征)。fc3:
輸入維度 84,輸出維度 10(對應 10 個分類類別,如數字 0~9)。作用
將卷積層提取的二維特征展平為一維向量,通過全連接層進行非線性變換,最終映射到分類結果。

2. 參數解析(以輸入?32x32?為例)

(1) 卷積層參數計算

  • 公式
    參數量 =?(kernel_height × kernel_width × input_channels + 1) ×output_channels
    +1?為偏置項)

層名參數定義參數量計算結果
C1nn.Conv2d(1, 6, 5)(5×5×1 + 1)×6156
C3nn.Conv2d(6, 16, 5)(5×5×6 + 1)×162416

(2) 全連接層參數計算

  • 公式
    參數量 =?(input_features + 1) × output_features

層名參數定義參數量計算結果
C5nn.Linear(16*5*5, 120)(400 + 1)×12048120
F6nn.Linear(120, 84)(120 + 1)×8410164
輸出nn.Linear(84, 10)(84 + 1)×10850

總參數量156 + 2416 + 48120 + 10164 + 850 = 61,706

3. 圖片尺寸解析(輸入?32x32

(1) 尺寸變化公式

  • 卷積層
    H_out = floor((H_in + 2×padding - kernel_size) / stride + 1)
    (默認?stride=1,?padding=0

  • 池化層
    H_out = floor((H_in - kernel_size) / stride + 1)
    (通常?stride=kernel_size

(2) 逐層尺寸變化

層名操作類型參數輸入尺寸輸出尺寸計算結果
輸入--1×32×32-1×32×32
C1卷積kernel=5, stride=11×32×32(32 - 5)/1 + 1 = 286×28×28
S2平均池化kernel=2, stride=26×28×28(28 - 2)/2 + 1 = 146×14×14
C3卷積kernel=5, stride=16×14×14(14 - 5)/1 + 1 = 1016×10×10
S4平均池化kernel=2, stride=216×10×10(10 - 2)/2 + 1 = 516×5×5
C5展平+全連接-16×5×5展平為 400 維向量120
F6全連接-120-84
輸出全連接-84-10

(3) 關鍵問題解答

Q1: 為什么全連接層?fc1?的輸入是?16*5*5
  • 經過兩次卷積和池化后,特征圖尺寸從?32x32?→?28x28?→?14x14?→?10x10?→?5x5且最后一層有 16 個通道,因此展平后的維度為?16×5×5=400

Q2: 如果輸入是?28x28(如 MNIST),尺寸會如何變化?
  • 調整方式
    修改第一層卷積的?padding=2(在四周補零),使輸出尺寸滿足?(28+4-5)/1 +1=28(保持尺寸不變),后續計算與原始 LeNet-5 一致。

    self.conv1 = nn.Conv2d(1, 6, 5, padding=2) # 保持28x28

    Q3: 參數量主要集中在哪部分?

  • 全連接層?C5?占總數 78% (48120/61706),這是 LeNet-5 的設計瓶頸。現代 CNN 通常用全局平均池化(GAP)替代全連接層以減少參數。

5. 完整尺寸變換流程圖(輸入?32x32

輸入: 1×32×32 ↓ [C1] Conv2d(1,6,5)
6×28×28 ↓ [S2] AvgPool2d(2,2)
6×14×14 ↓ [C3] Conv2d(6,16,5)
16×10×10 ↓ [S4] AvgPool2d(2,2)
16×5×5 ↓ 展平
400 ↓ [C5] Linear(400,120)
120 ↓ [F6] Linear(120,84)
84 ↓ 輸出
10

?使用下面代碼,可以看到具體參數量:

# 遍歷模型的所有子模塊
for name, param in model.named_parameters():if param.requires_grad:print(f"Layer: {name}")if 'weight' in name:print(f"Weights:{param.data.shape}")if 'bias' in name:print(f"Bias:{param.data.shape}\n")

?輸出:

Layer: feature_extractor.0.weight
Weights:torch.Size([6, 1, 5, 5])
Layer: feature_extractor.0.bias
Bias:torch.Size([6])Layer: feature_extractor.2.weight
Weights:torch.Size([16, 6, 5, 5])
Layer: feature_extractor.2.bias
Bias:torch.Size([16])Layer: classifier.1.weight
Weights:torch.Size([120, 400])
Layer: classifier.1.bias
Bias:torch.Size([120])Layer: classifier.2.weight
Weights:torch.Size([84, 120])
Layer: classifier.2.bias
Bias:torch.Size([84])Layer: classifier.3.weight
Weights:torch.Size([10, 84])
Layer: classifier.3.bias
Bias:torch.Size([10])

? ?寫完文章,疑問終于搞明白了。大家也可以參考下面這個連接。

? ?https://blog.csdn.net/lihuayong/article/details/145671336?fromshare=blogdetail&sharetype=blogdetail&sharerId=145671336&sharerefer=PC&sharesource=lihuayong&sharefrom=from_link

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

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

相關文章

第二節:文件系統

理論知識 文件系統的基本概念:文件系統是操作系統中負責管理持久數據的子系統,它將數據組織成文件和目錄的形式,方便用戶存儲和訪問數據。Linux文件系統的類型:常見的 Linux 文件系統類型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…

Python數據結構與算法(5)——動態規劃

Python數據結構與算法(5)——動態規劃 0. 學習目標1. 動態規劃的基本概念1.1 什么是動態規劃1.2 動態規劃的核心思想1.3 動態規劃的適用條件2. 動態規劃的實現思路2.1 自頂向下:備忘錄法 (Memoization)2.2 自底向上:表格法(Tabulation)3. 0/1 背包問題4. 最長公共子序列5…

【JAVA ee初階】多線程(3)

一、出現線程安全的原因 1.【根本原因】線程的調度執行時隨機的(搶占式執行)->罪魁禍首 2.多個線程同時修改同一個變量 如果是一個線程修改一個變量 或者 多個線程讀取同一個變量 或者 多個線程修改不同變量 這些都沒事。 3.修改操作不是原子的&a…

Halcon 3D 表面匹配基于形狀

文章目錄 prepare_object_model_3d 準備 3D 物體模型read_shape_model_3d — 讀取3D匹配模型create_shape_model_3d 準備要匹配的3D模型find_shape_model_3d ——發現匹配模型project_shape_model_3d 將三維形狀模型的邊緣投影到圖像坐標中。示例ignore_part_polarity&#xff…

【Linux】Java 開發者的 Linux 常用命令指南

Java 開發者的 Linux 常用命令指南 目錄標題 Java 開發者的 Linux 常用命令指南1. Linux 目錄結構2. 系統信息命令3. 服務管理系統服務防火墻管理 4. 文本編輯 (vi/vim)常用模式 5. 文件和目錄操作查看與導航創建與刪除查看文件內容查找文件 6. 用戶管理7. 壓縮和解壓8. 權限管…

每日c/c++題 備戰藍橋杯(P1252洛谷 馬拉松接力賽)

洛谷P1060 馬拉松接力賽題解:貪心算法在資源分配中的巧妙應用 題目描述 P1060 馬拉松接力賽是一道結合貪心策略與動態規劃思想的資源分配問題。題目要求將25公里的馬拉松接力賽合理分配給5名選手,使得總耗時最短。每位選手可跑1-10公里的整數距離&…

Nginx 中間件

Nginx(發音為 "engine-x")是一款開源的高性能 HTTP 服務器和反向代理服務器,最初由 Igor Sysoev 開發。 它以其高性能、穩定性、豐富的功能集和低資源消耗而聞名,廣泛應用于全球的 Web 服務架構中。 作為中間件&#…

Neo4j在win下安裝教程(docker環境)

1. 安裝命令 1.1 基于正式neo4j安裝–不用 docker run --name neo4j-container -p 7474:7474 -p 7687:7687 -d neo4j1.2 基于community安裝 需要部署兩個Neo4j,一個正式庫prod,一個測試庫dev。 neo4j默認監聽7474(HTTP-也就是瀏覽器端口&…

kylin v10 + argo + ascend 310p多機多卡 pytorch distributed 訓練

最近接了個模型訓練編排多機多卡的改造需求,要求使用argo dag task啟動多個節點,同時多個節點能實現 torch.distributed.launch 這樣多機多卡的訓練模式 簡述技術 torch.distributed.launch命令介紹 我們在訓練分布式時候,會使用到 torch.d…

[Mac] 使用homebrew安裝miniconda

使用虛擬環境可以對不同項目的依賴進行隔離。可以使用venv或者conda來創建和使用虛擬環境。 venv是Python內置的虛擬環境管理模塊,適合純Python項目以及快速輕量級的開發和部署。conda具備更強大的版本管理能力,但是占用較大的磁盤空間。 考慮到我基本不…

CMU-15445(1)——環境搭建

前言 最近在找完暑期實習之后,終于有了一些干項目外的空余時間學習新的知識,在這么多輪面試中,數據庫的考察非常多,但孱弱的數據庫基礎導致我有很多次面試被問住,因此我希望在學習CMU-15445(Fall 2024&…

CSS元素動畫篇:基于當前位置的變換動畫(四)

基于當前位置的變換動畫(四) 前言透明效果類元素動畫閃爍動畫效果效果預覽代碼實現 淡入動畫效果效果預覽代碼實現 淡出動畫效果效果預覽代碼實現 結語 前言 CSS元素動畫一般分為兩種:一種是元素基于當前位置的變換動畫,通過不明…

STM32驅動AD5318配置8通道DA詳細講解

目錄 1. AD5318 芯片特性 2、AD5318寄存器概述 3、SPI數據幀格式 3.1 控制位(Bit15) 3.2 地址位(Bit14-Bit12,3 位) 3.3 數據 / 控制碼(Bit11-Bit0) 4、控制功能寄存器(控制位 = 1 時激活) 4.1 參考與增益配置(MM = 00) 4.2. LDAC模式(MM = 01) 4.3 掉…

如何搭建spark yarn 模式的集群集群

以下是搭建Spark YARN模式集群的一般步驟: 準備工作 - 確保集群中各節點安裝了Java環境,并配置好 JAVA_HOME 環境變量。 - 各節點間能通過SSH免密登錄。 - 安裝并配置好Hadoop集群,YARN作為Hadoop的資源管理器,Spark YARN模式需要…

SpringMVC處理請求映射路徑和接收參數

目錄 springmvc處理請求映射路徑 案例:訪問 OrderController類的pirntUser方法報錯:java.lang.IllegalStateException:映射不明確 核心錯誤信息 springmvc接收參數 一 ,常見的字符串和數字類型的參數接收方式 1.1 請求路徑的…

在 Windows 系統上升級 Node.js

一、查詢電腦端已經安裝的 Node.js 版本 1、通過【winR】 鍵,輸入 cmd,點擊【確定】按鈕打開 cmd 窗口 2、命令行界面輸入 node -v 查看目前 Node.js 版本 3、命令行界面輸入 npm -v 查看目前 npm 版本 二、進入官網地址下載安裝包 1、官網地址&#x…

深入詳解人工智能數學基礎——概率論中的馬爾可夫鏈蒙特卡洛(MCMC)采樣

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

C++ 嵌套類 (詳解 一站式講解)

目錄 嵌套類 嵌套類的定義 嵌套類結構的訪問權限 pimpl模式(了解) 嵌套類 嵌套類的定義 首先介紹兩個概念: 類作用域(Class Scope) 類作用域是指在類定義內部的范圍。在這個作用域內定義的成員(包括…

tcp 和http 網絡知識

1. 請簡述TCP和HTTP的定義與基本概念 TCP:即傳輸控制協議(Transmission Control Protocol),是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它為互聯網中的數據通信提供穩定的傳輸機制,在不可靠的IP層之上&a…

MySQL安裝的多個組件中無用組件卸載

在決定卸載MySQL的哪些組件前,需根據你的實際使用場景判斷。以下是各組件的主要功能及卸載建議: 1. 核心組件卸載建議 組件名稱作用是否可卸載MySQL Server數據庫服務核心,存儲數據、處理SQL請求的核心程序。不可卸載 (卸載會導致…