經典卷積神經網絡LeNet實現(pytorch版)

LeNet卷積神經網絡

  • 一、理論部分
    • 1.1 核心理論
    • 1.2 LeNet-5 網絡結構
    • 1.3 關鍵細節
    • 1.4 后期改進
    • 1.6 意義與局限性
  • 二、代碼實現
    • 2.1 導包
    • 2.1 數據加載和處理
    • 2.3 網絡構建
    • 2.4 訓練和測試函數
      • 2.4.1 訓練函數
      • 2.4.2 測試函數
    • 2.5 訓練和保存模型
    • 2.6 模型加載和預測

一、理論部分

LeNet是一種經典的卷積神經網絡(CNN),由Yann LeCun等人于1998年提出,最初用于手寫數字識別(如MNIST數據集)。它是CNN的奠基性工作之一,其核心思想是通過局部感受野、共享權重和空間下采樣來提取有效特征


1.1 核心理論

  • 局部感受野(Local Receptive Fields)
    卷積層通過小尺寸的濾波器(如5×5)掃描輸入圖像,每個神經元僅連接輸入圖像的局部區域,從而捕捉局部特征(如邊緣、紋理)

  • 共享權重(Weight Sharing)
    同一卷積層的濾波器在整張圖像上共享參數,顯著減少參數量,增強平移不變性

  • 空間下采樣(Subsampling)
    池化層(如平均池化)降低特征圖的分辨率,減少計算量并增強對微小平移的魯棒性

  • 多層特征組合
    通過交替的卷積和池化層,逐步組合低層特征(邊緣)為高層特征(數字形狀)


1.2 LeNet-5 網絡結構

LeNet-5是LeNet系列中最著名的版本,其結構如下(輸入為32×32灰度圖像):

層類型參數說明輸出尺寸
輸入層灰度圖像32×32×1
C1層卷積層:6個5×5濾波器,步長1,無填充28×28×6
S2層平均池化:2×2窗口,步長214×14×6
C3層卷積層:16個5×5濾波器,步長110×10×16
S4層平均池化:2×2窗口,步長25×5×16
C5層卷積層:120個5×5濾波器1×1×120
F6層全連接層:84個神經元84
輸出層全連接 + Softmax(10類)10

1.3 關鍵細節

  • 激活函數
    原始LeNet使用Tanh或Sigmoid,現代實現常用ReLU

  • 池化方式
    原始版本使用平均池化,后續改進可能用最大池化

  • 參數量優化
    C3層并非全連接至S2的所有通道,而是采用部分連接(如論文中的連接表),減少計算量

  • 輸出處理
    最后通過全連接層(F6)和Softmax輸出分類概率(如0-9數字)


1.4 后期改進

  • ReLU替代Tanh:解決梯度消失問題,加速訓練
  • 最大池化:更關注顯著特征,抑制噪聲
  • Batch Normalization:穩定訓練過程
  • Dropout:防止過擬合(原LeNet未使用)

1.6 意義與局限性

  • 意義
    證明了CNN在視覺任務中的有效性,啟發了現代深度學習模型(如AlexNet、ResNet)

  • 局限性
    參數量小、層數淺,對復雜數據(如ImageNet)表現不足,需更深的網絡結構

LeNet的設計思想至今仍是CNN的基礎,理解它有助于掌握現代卷積神經網絡的演變邏輯

二、代碼實現

  • LeNet 是一個經典的卷積神經網絡(CNN),由 Yann LeCun 等人于 1998 年提出,主要用于手寫數字識別(如 MNIST 數據集)
  • MNIST數據集是機器學習領域中非常經典的一個數據集,由60000個訓練樣本和10000個測試樣本組成,每個樣本都是一張28 * 28像素的灰度手寫數字圖片
  • 總體來看,LeNet(LeNet-5)由兩個部分組成:(1)卷積編碼器:由兩個卷積層組成(2)全連接層密集塊:由三個全連接層組成

2.1 導包

import torch
import torch.nn as nn
import torchvision
from tqdm import tqdm
from torchsummary import summary

2.1 數據加載和處理

# 加載 MNIST 數據集
def load_data(batch_size=64):transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor(),  # 將圖像轉換為張量torchvision.transforms.Normalize((0.5,), (0.5,))  # 歸一化])# 下載訓練集和測試集train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)# 創建 DataLoadertrain_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)return train_loader, test_loader

2.3 網絡構建

  • LeNet 的網絡結構如下:
    • 卷積層 1:輸入通道 1,輸出通道 6,卷積核大小 5x5
    • 池化層 1:2x2 的最大池化
    • 卷積層 2:輸入通道 6,輸出通道 16,卷積核大小 5x5。
    • 池化層 2:2x2 的最大池化。
    • 全連接層 1:輸入 16x5x5,輸出 120
    • 全連接層 2:輸入 120,輸出 84
    • 全連接層 3:輸入 84,輸出 10(對應 10 個類別)
#定義LeNet網絡架構
class LeNet(nn.Module):def __init__(self):super(LeNet,self).__init__()self.net=nn.Sequential(#卷積層1nn.Conv2d

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

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

相關文章

二維碼掃不出?用QR Research工具

一.簡介 簡單來說QR Research就是用來掃二維碼的工具 當二維碼模糊不清,無法用普通方式掃時,就可以用QR Research輕松掃描。QR Research還可以分析變形/破損二維碼(修復或提取有效部分) 二.下載安裝 QR Research 三.例題 這…

02_使用Docker在服務器上部署Jekins實現項目的自動化部署

02_使用Docker在服務器上部署jenkins實現項目的自動化部署 一、使用docker拉取阿里云容器私有鏡像倉庫內的jenkins鏡像 登錄阿里云Docker Registry $ sudo docker login --usernamewxxxo1xxx registry.cn-shanghai.aliyuncs.com用于登錄的用戶名為阿里云賬號全名&#xff0c…

微服務組件——Eureka組件的安裝與使用指南

文章目錄 一、Eureka Server的安裝與配置1、創建Spring Boot項目2、添加依賴3、配置Eureka Server4、啟用Eureka Server5、啟動并訪問Dashboard 二、Eureka Client的配置(服務注冊)1、添加客戶端依賴2、配置客戶端3、啟用服務發現4、啟動服務 三、服務發…

探索Doris:日志分析的新寵,是否能取代老牌ES?

在大數據時代,日志存儲與分析對于企業的運營和決策起著至關重要的作用。Elasticsearch(簡稱 ES)作為一款廣泛應用的開源分布式搜索和分析引擎,長期以來在日志管理領域占據著舉足輕重的地位。然而,隨著技術的不斷發展&a…

學習threejs,使用Texture紋理貼圖,測試repeat重復紋理貼圖

👨??? 主頁: gis分享者 👨??? 感謝各位大佬 點贊👍 收藏? 留言📝 加關注?! 👨??? 收錄于專欄:threejs gis工程師 文章目錄 一、🍀前言1.1 ??Texture 紋理貼圖1.1.1 ??…

圖像配準及識別

一、圖像配準基礎 圖像配準,聽起來很高大上,其實用大白話來說,就是“讓兩張照片對齊”的技術。想象一下,你有兩張拍得不完全一樣的照片,比如一張是你從正面拍的風景,另一張是從側面拍的同一個地方&#xff…

QT之QML(簡單示例)

需求一:點擊按鈕彈出菜單,并且自定義菜單彈出位置。 mouse.x 和 mouse.y 獲取的是相對于 MouseArea(在這個例子中是 Button)左上角的局部坐標。如果你想要在鼠標點擊位置顯示 Menu,你需要將這個局部坐標轉換為相對于應…

如何編寫單元測試

一、前言知識 1.開發過程 需求分析->設計->開發->測試->上線 2.測試種類 單元測試(測試模塊編碼)、黑盒測試(測試功能是否滿足需求)、白盒測試(測試程序內部的邏輯結構)、回歸測試(提出的缺陷進行二次驗證)、集成測試(測試主要的業務功能及模塊間的整合性)、系…

LeetCode 解題思路 30(Hot 100)

解題思路: 遞歸參數: 生成括號的對數 n、結果集 result、當前路徑 path、左括號數 open、右括號數 close。遞歸過程: 當當前路徑 path 的長度等于 n * 2 時,說明已經生成有效括號,加入結果集。若左括號數小于 n&…

【Golang】Windows系統鍵鼠空閑監測練習

在本文中,我們將練習如何使用Golang編寫一個簡單的Windows系統空閑時間監測工具。該工具能夠檢測系統的空閑時間,并在達到一定閾值時計數。 功能概述 監控鼠標和鍵盤的空閑事件,每空閑超過50s,觸發次數加一。 該工具具有以下功…

關于React Redux

官網:👉詳情一 👉詳情二 👉關于redux 使用原因:👉詳情 /** 2-1、隨著javascript單頁應用程序的發展,需要在代碼中管理更多的狀態(包括服務器響應數據、緩存數據、本地創建還未發送…

MySQL和Oracle批量插入SQL差異詳解

文章目錄 MySQL和Oracle批量插入SQL差異詳解1. 基本批量插入語法1.1 MySQL批量插入1.2 Oracle批量插入 2. 帶序列的批量插入2.1 MySQL帶自增ID的批量插入2.2 Oracle帶序列的批量插入 3. 條件批量插入3.1 MySQL條件批量插入3.2 Oracle條件批量插入 MySQL和Oracle批量插入SQL差異…

43頁可編輯PPT | 大數據管理中心設計規劃方案大數據中心組織架構大數據組織管理

這份文檔是一份關于大數據管理中心規劃設計方案的詳細報告,涵蓋了背景與需求分析、整體規劃方案、關鍵能力實現方案以及實施方案等內容。報告強調大數據在城市治理中的重要性,提出通過構建統一的大數據平臺,整合城市各部門數據資源&#xff0…

Python-八股總結

目錄 1 python 垃圾處理機制2 yield3 python 多繼承,兩個父類有同名方法怎么辦?4 python 多線程/多進程/協程4.1 多線程與GIL全局解釋器鎖4.2 多進程4.3 協程 5 樂觀鎖/悲觀鎖6 基本數據結構**1. 列表(List)****2. 元組&#xff0…

HTML 標簽類型全面介紹

HTML 標簽類型全面介紹 HTML(HyperText Markup Language)是構建 Web 頁面結構的基礎語言。HTML 由不同類型的標簽組成,每種標簽都有特定的用途。本文將全面介紹 HTML 標簽的分類及其用法。 1. HTML 標簽概述 HTML 標簽通常成對出現&#xf…

vscode中的【粘滯滾動】的基本概念和作用,關閉了以后如何開啟

1、粘滯滾動的基本概念和作用 ?VSCode中的“粘滯”功能主要是指編輯器在滾動時的一種特殊效果,使得編輯器在滾動到某個位置時會“粘”在那里,而不是平滑滾動到底部或頂部。? 粘滯滾動的基本概念和作用 粘滯滾動功能可以讓用戶在滾動時更直觀地看到當前…

【商城實戰(101)】電商未來已來:新技術引領商城發展新航向

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…

深度學習Note.5(機器學習.6)

1.Runner類 一個任務應用機器學習方法流程: 數據集構建 模型構建 損失函數定義 優化器 模型訓練 模型評價 模型預測 所以根據以上,我們把機器學習模型基本要素封裝成一個Runner類(加上模型保存、模型加載等功能。) Runne…

linux服務器專題1------redis的安裝及簡單配置

在 linux上安裝 Redis 可以按照以下步驟進行(此處用Ubuntu 服務器進行講解): 步驟 1: 更新系統包 打開終端并運行以下命令以確保你的系統是最新的: sudo apt update sudo apt upgrade步驟 2: 安裝 Redis 使用 apt 包管理器安裝 Redis: s…

面試問題總結:qt工程師/c++工程師

C 語言相關問題答案 面試問題總結:qt工程師/c工程師 C 語言相關問題答案 目錄基礎語法與特性內存管理預處理與編譯 C 相關問題答案面向對象編程模板與泛型編程STL 標準模板庫 Qt 相關問題答案Qt 基礎與信號槽機制Qt 界面設計與布局管理Qt 多線程與并發編程 目錄 基礎…