当前位置: 首页 > news >正文

基于 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随机梯度下降

相关文章:

基于 LeNet 网络的 MNIST 数据集图像分类

1.LeNet的原始实验数据集MNIST 名称:MNIST手写数字数据集 数据类型:灰度图 (一通道) 图像大小:28*28 类别数:10类(数字0-9) 1.通过torchvision.datasets.MNIST下载并保存到本地…...

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128,llama_cpp_python官方源只有cpu版本,没有cuda版本,所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…...

Spring Boot静态资源访问顺序

在 Spring Boot 中,static 和 public 目录都用于存放静态资源(如 HTML、CSS、JavaScript、图片等文件),但它们在使用上有一些细微的区别。以下是它们的详细对比: 1. 默认优先级 Spring Boot 会按照以下优先级加载静态…...

电脑总显示串口正在被占用处理方法

1.现象 在嵌入式开发过程中,有很多情况下要使用串口调试,其中485/422/232转usb串口是非常常见的做法。 根据协议,接口芯片不同,需要安装对应的驱动程序,比如ch340,cp2102,CDM212364等驱动。可…...

工具介绍《HACKBAR V2》

HackBar V2 是一款功能强大的浏览器渗透测试工具,主要用于测试 SQL 注入、XSS 漏洞、POST 传参等安全场景。以下是其核心功能、用法及实际案例操作的综合介绍: 一、核心功能与用法详解 1. 基础操作 Load URL 功能:将当前浏览器地址栏的 URL …...

Java算法语法学习 美丽子集的数目 - 力扣 Map接口

文章目录 题目解题思路题解统计数组中每个数字按模k分组的出现次数,并保持数值有序作用 **merge(x, 1, Integer::sum)**解释**检查键是否存在**:**合并现有值**: 示例在代码中的应用**计算余数**:**存储余数及其出现次数**: merge 的常见用法统计频率合并字符串合并…...

Vue项目通过内嵌iframe访问另一个vue页面,获取token适配后端鉴权(以内嵌若依项目举例)

1. 改造子Vue项目进行适配(ruoyi举例) (1) 在路由文件添加需要被外链的vue页面配置 // 若依项目的话是 router/index.js文件 {path: /contrast,component: () > import(/views/contrast/index),hidden: true },(2) 开放白名单 // 若依项目的话是 permission.js 文件 cons…...

梯度本质论:从黎曼流形到神经网络的拓扑寻优

一、微分几何框架下的梯度再诠释 在标准数学分析中,梯度被定义为标量场 f : R n → R f:\mathbb{R}^n→\mathbb{R} f:Rn→R的导数张量 ∇ f ( ∂ f ∂ x 1 , . . . , ∂ f ∂ x n ) \nabla f(\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n…...

计算机毕业设计SpringBoot+Vue.js网络海鲜市场系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

一文对比RAGFLOW和Open WebUI【使用场景参考】

一、RAGFLOW与Open WebUI RAGFLOW是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不…...

2025年03月07日Github流行趋势

项目名称:ai-hedge-fund 项目地址url:https://github.com/virattt/ai-hedge-fund项目语言:Python历史star数:12788今日star数:975项目维护者:virattt, seungwonme, KittatamSaisaard, andorsk, arsaboo项目…...

实训任务2.2 使用Wireshark捕获数据包并分析

目录 【实训目标】 【实训环境】 【实训内容】 【实训步骤】 1.启动WireShark 2. 使用Wireshark捕获数据包 (1)选择网络接口 (2)捕获数据包 (1)设置Wireshark过滤器并捕获数据包 (2&…...

C# Lambda 表达式 详解

总目录 前言 在C#编程中,Lambda表达式是一种简洁而强大的语法特性,它提供了一种更加灵活和直观的方式来编写匿名函数。无论是在LINQ查询、事件处理还是异步编程中,Lambda表达式都扮演着重要角色。本文将详细介绍Lambda,帮助您更好…...

wordpress自定the_category的输出结构

通过WordPress的过滤器the_category来自定义输出内容。方法很简单,但是很实用。以下是一个示例代码: function custom_the_category($thelist, $separator , $parents ) {// 获取当前文章的所有分类$categories get_the_category();if (empty($categ…...

HTML前端手册

HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案,供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…...

vscode mac版本 配置git

首先使用 type -a git查看git的安装目录 然后在vscode中找到settings配置文件,修改git.path...

爬虫Incapsula reese84加密案例:Etihad航空

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、找出需要加密的参数 1.js运行 atob(‘aHR0cHM6Ly93d3cuZXRpaGFkLmNvbS96aC1jbi8=’) 拿到网址,F12打开调试工具,随便搜索航班,切换到network搜索一个时间点可以找…...

【C#】async与await介绍

1. 实例1 1.1 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){Method1();Method2();Console.ReadKey();}public static…...

【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…...

Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式

路由组件和一般组件 路由组件 一般放到pages或view目录 一般组件 一般放到component目录 切换路由 切换路由时,组件和执行挂载和卸载 路由的工作模式 Hash模式 缺点 1.不美观,路径带#号 优点 1.兼容性好 一般适用于管理系统 History模式 缺点…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性&#xf…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...