基于 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.mzph.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…