基于 LeNet 網絡的 MNIST 數據集圖像分類

1.LeNet的原始實驗數據集MNIST

名稱:MNIST手寫數字數據集

數據類型:灰度圖 (一通道)

圖像大小:28*28

類別數:10類(數字0-9)

1.通過torchvision.datasets.MNIST下載并保存到本地為JPEG圖片:

下載數據集并保存圖片形式(download_mnist.py)

庫:sys,os,tqdm

圖片命名的格式為:子數據集名_在子數據集中的編號_真實值標簽。

圖片大小:28*28

?2.使用gzip解析MNIST數據集文件parse_mnist.py

MNIST的圖片和標簽均通過二進制文件進行保存(.gz),無法直接在Windows中查看手寫數字的圖片和標簽,通過gzip解壓,轉換為numpy數組。

將標簽數據轉換為one-hot編碼:將每個標簽轉換為一個向量,其中該標簽對應的索引位置為 1,其他位置為 0。

one-hot編碼

將類別標簽轉化為一個 長度為類別數的二進制向量,每個類別的位置對應為 1,其它位置為 0。

one-hot編碼

將類別標簽轉化為一個 長度為類別數的二進制向量,每個類別的位置對應為 1,其它位置為 0。

  • 數字 0[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  • 數字 1[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
  • 數字 2[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

3、預處理數據集(prepare_data.py)

調用parse_mnist函數對原始的mnist數據進行解析,創建數據加載器train_loader

  1. 歸一化:將加載的圖像數據除以 255.0,將圖像的像素值從 [0, 255] 范圍縮放到 [0, 1]。
  2. 轉換為 Tensor:將NumPy 數組轉換為 PyTorch 的 Tensor 。
  3. 重塑圖像:將圖像數據從 28x28 的二維數組重塑為符合神經網絡輸入要求的形狀 (-1, 1, 28, 28)。
  4. 創建數據集和數據加載器:

train_dataset = TensorDataset(train_image, train_label)
#TensorDataset:數據集類,將圖像和標簽數據封裝成一個數據集
train_loader=(train_dataset,batch_size=64,shuffle=True)
#DataLoader:數據加載器類,數據集分成小批次,shuffle=True可打亂

2.LeNet神經網絡模型

公式

1.N = (W-F+2P)/S+1

卷積后尺寸=(輸入-卷積核+加邊像素數)/步長 +1

用于計算卷積層/池化層輸出的尺寸,參數含義:

N:輸出特征圖的大小

W:輸入特征圖的大小

F:卷積核的大小(5*5)

P:填充(padding)的大小,表示在輸入的邊緣填充多少像素

S: 步長(stride),卷積核每次滑動的步幅

2.輸出通道數 = 卷積核組數量

輸入通道數=上一層的輸出通道數

卷積層通道數逐漸增加

3.輸出圖像尺度計算

N = (W-F+2P)/S+1

  • 第一層:C1卷積層

輸入:28*28*1

參數:self.c1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2,stride=1)

輸出:28*28*6(padding=2寬高不變,通道數為6)

  • 第二層:S2池化層(使圖像尺寸減半)

輸入:28*28*6

參數:self.s2 = nn.AvgPool2d(kernel_size=2, stride=2,padding=0)

池化核大小默認等于步長,使輸出大小是輸入大小的一半

輸出:14*14*6

  • 第三層:C3卷積層

輸入:14*14*6

參數:self.c3 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5,padding=0,stride=1)

輸出:10*10*16

  • 第四層:S4池化層

輸入:10*10*16

參數:self.s4 = nn.AvgPool2d(kernel_size=2, stride=2)

輸出:5*5*16

  • 第五層:C5卷積層

輸入:5*5*16

參數self.c5 = nn.Conv2:d(in_channels=16, out_channels=120, kernel_size=5,padding=0,stride=1)

輸出:1*1*120

概念

卷積層

卷積核:二維數組

主要功能:對輸入數據進行特征提取,卷積操作實質上是把卷積核當濾波器在圖像上特征提取。

卷積步驟:

  1. 卷積窗口從輸入數組的最左上方,從左往右、從上到下,依次在輸入數組上滑動。
  2. 窗口中的輸入子數組與卷積核按元素相乘并求和,得到輸出數組中相應位置的元素。

池化層

基本操作:縮小圖片,保留重要特征。不會裁剪刪除內容。

池化步驟:

  1. 池化層對輸入數據的局部區域(池化窗口)計算輸出,取最大值或平均值,最終降低特征圖的尺寸。

最大池化Max Pooling

取局部區域的最大值

作用:保留最明顯的特征(邊緣、紋理)

平均池化Avg Pooling

取局部區域的平均值

作用:反映特征的整體分布情況。

池化核大小Kernel_size

定義池化窗口的大小

步長stride

控制窗口移動的步長(默認等于池化核大小)

填充padding

在輸入特征圖的邊緣補零:

保持輸出大小不變(如 padding=1 可以保持尺寸)。

防止邊緣信息丟失

激活函數(非線性函數)

(1)sigmoid函數

輸出范圍(0,1),適用于輸出概率。sigmoid函數清晰地解釋神經元激活水平:接近1,更高激活;接近0,較低激活。

應用場景:二分類問題

(2)ReLU激活函數

如果輸入x是 正數,ReLU 輸出 x本身。

如果輸入x是 負數,ReLU 輸出 0。

作用:

  1. 激活函數的作用是讓網絡學習非線性的特征
  2. 解決梯度消失問題:Sigmoid 和 Tanh 函數,輸入值變的特別大或特別小時,激活函數的梯度接近0.

缺點:

死神經元問題:某些神經元輸出 永遠是 0 時(也就是當輸入總是負數時)。這會導致這些神經元在訓練過程中不再被更新

(3)tanh函數

?

?輸出范圍:(-1,1)

優化算法

ADM算法

AGD隨機梯度下降

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

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

相關文章

電池綜合測試儀:科技賦能,精準守護能源安全

在當今這個科技日新月異的時代,電池作為眾多電子設備的心臟,其性能的穩定與高效直接關系到設備的運行質量與使用安全。隨著電動汽車、可穿戴設備、儲能系統等領域的快速發展,對電池性能的檢測與評估提出了更高要求。在此背景下,電…

【Linux 22.4 ubuntu 安裝cuda12.1 完整方案】

下載cuda12.1 官網網址 wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run sudo sh cuda_12.1.1_530.30.02_linux.run!import! 如果已經安裝驅動,則不要選擇dirver那項 添加環境變量 vim ~/.b…

實戰案例分享:Android WLAN Hal層移植(MTK+QCA6696)

本文將詳細介紹基于MTK平臺,適配高通(Qualcomm)QCA6696芯片的Android WLAN HAL層的移植過程,包括HIDL接口定義、Wi-Fi驅動移植以及wpa_supplicant適配過程,涵蓋STA與AP模式的常見問題與解決方法。 1. HIDL接口簡介 HID…

Greenplum6.19集群搭建

一,安裝說明 1.1環境說明 1、首先確定部署的環境,確定下服務器的端口,一般默認是22的端口; 2、當前這份文檔是服務器處于10022端口下部署的(現場生產環境要求,22端口在生產環境存在安全隱患)&…

電商項目-秒殺系統(四)秒殺異步下單防止重復秒殺

一、 防止惡意刷單解決 在生產場景下,可能會有一些人會惡意訪問當前網站,來進行惡意的刷單。這樣會造成當前系統出現一些業務上的業務混亂,出現臟數據,或者造成后端訪問壓力大等問題。 一般要解決這個問題的話,前端可…

原生android 打包.aar到uniapp使用

1.原生安卓里面引入uniapp官方提供的包文件: uniapp-v8-release.aar 2.提供uniapp調用的接口,新建類文件繼承UniModule, package com.dermandar.panoramal;import com.scjt.lib.certlib;import io.dcloud.feature.uniapp.annotation.UniJSM…

Android 多用戶相關

Android 多用戶相關 本文主要記錄下android 多用戶相關的adb 命令操作. 1: 獲取用戶列表 命令: adb shell pm list users 輸出如下: Users:UserInfo{0:機主:c13} running默認只有一個用戶, id為0 ,用戶狀態為運行 2: 創建新用戶 命令: adb shell …

基于Spring Boot的高校就業招聘系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

前端安全面試題匯總及參考答案

目錄 簡述 XSS 攻擊的原理及三種常見類型(存儲型、反射型、DOM 型) 如何在前端防御 XSS 攻擊?列舉編碼、過濾、CSP 策略的具體實現方式 富文本編輯器場景下如何安全處理用戶輸入的 HTML 內容? 如何通過 HttpOnly 屬性增強 Cookie 安全性?它與 XSS 防御的關系是什么? …

Linux驅動開發(1.基礎創建)

序言:從高層邏輯到底層硬件的回歸 在當今的軟件開發中,我們習慣于用高級語言構建抽象層——通過框架、庫和云服務快速實現功能。這種“軟邏輯”的便利性讓開發效率倍增,卻也逐漸模糊了我們對計算機本質的認知:一切代碼終將落地為…

Gradle本地配置文件分享

Gradle本地配置文件分享 allprojects {repositories {mavenLocal()maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }ma…

deepseek 本地部署

deepseek 本地部署 純新手教學,手把手5分鐘帶你在本地部署一個私有的deepseek,再也不用受網絡影響。流暢使用deepseek!!! 如果不想看文章,指路:Deep seek R1本地部署 小白超詳細教程 &#xff0…

HTML學習筆記(全)

基本結構 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title></title> </head> <body></body> </html> 基本標簽元素 標題&#xff08;heading&#xff09; <h1>一級標題</h1> &…

騰訊云對象存儲服務(COS)

騰訊云對象存儲服務&#xff08;COS&#xff09; 安全、可擴展、低成本的云存儲解決方案 騰訊云 對象存儲服務&#xff08;COS&#xff0c;Cloud Object Storage&#xff09; 是一種高可靠、高性能、可擴展的云存儲服務&#xff0c;專為海量非結構化數據&#xff08;如圖片、…

從ETL到數倉分層:大數據處理的“金字塔”構建之道

在當今數據驅動的時代&#xff0c;大數據處理已成為企業決策和業務優化的核心。而ETL&#xff08;Extract, Transform, Load&#xff09;作為數據處理的基石&#xff0c;其背后的數倉分層理念更是決定了數據處理的效率與質量。本文將深入探討ETL工作中的數倉分層理念&#xff0…

數字孿生對于新基建的價值淺析,算是拋磚引玉。

數字孿生&#xff08;Digital Twin&#xff09;作為一項融合物理世界與數字世界的關鍵技術&#xff0c;在新基建中扮演著虛實協同、智能決策、全生命周期管理的核心角色&#xff0c;其價值貫穿于基礎設施的設計、建設、運維到優化全流程。 一、核心價值&#xff1a;虛實映射與智…

從零開始實現大語言模型(十三):預訓練大語言模型GPTModel

1. 前言 使用梯度下降算法通過下一個token預測任務預訓練大語言模型GPTModel&#xff0c;前向傳播流程每次會輸入一個batch的長度均為context_len的訓練樣本&#xff0c;執行 batch_size context_len \text{batch\_size}\times\text{context\_len} batch_sizecontext_len次下…

QWQ大模型評測榜單

評測榜單說明 在數學推理基準AIME24上&#xff0c;QwQ-32B達到了79.5分&#xff0c;幾乎與DeepSeek-R1-617B的79.8分持平&#xff0c;遠超OpenAI o1-mini的63.6分&#xff0c;及相同尺寸的R1蒸餾模型。 在編程能力方面&#xff0c;QwQ-32B 在LiveCodeBench上獲得了63.4分&…

bash: uwsgi: 未找到命令

針對你提出的“bash: uwsgi: command not found”問題&#xff0c;以下是一些可能的解決方案&#xff0c;請按照步驟逐一排查&#xff1a; ?1、檢查uwsgi命令是否正確?&#xff1a; 確保你輸入的命令是uwsgi&#xff0c;而不是uWSGI或其他變體。 ?2、確認uwsgi是否已安裝?&…

超圖(Hypergraph)

超圖&#xff08;Hypergraph&#xff09;是圖結構學習&#xff08;Graph Learning&#xff09;中的一種擴展形式&#xff0c;它比傳統圖&#xff08;Graph&#xff09;更具表達能力&#xff0c;適用于建模復雜的多元關系。 超圖是一種由 超節點&#xff08;Hypernodes&#xff…