神经网络-LeNet

LeNet在1990年被提出,是一系列网络的统称,包括了LeNet1~LeNet5,对于神经网络的学习者来说,大家对下面这个图一定很熟悉,该图是对LeNet的简化展示。

在LeNet中已经提出了卷积层、Pooling层等概念,只是但是由于缺乏大量数据和计算机硬件资源限制,导致LeNet的表现并不理想。
LeNet网络结构
LeNet的构成很简单,包括了基础的卷积层、池化层和全连接层,原始的LeNet使用的是灰度图像,下面示例中使用彩色图像进行说明,不影响网络的理解。
-
定义网络层
# 定义网络
class LeNet(nn.Module): #继承来着nn.Module的父类def __init__(self): # 初始化网络#super()继承父类的构造函数,多继承需用到super函数super(LeNet, self).__init__()# 定义卷积层,[深度,卷积核数,卷积核大小]self.conv1 = nn.Conv2d(3, 16, 5)# 最大池化,[核大小,步长]self.pool1 = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 32, 5)self.pool2 = nn.MaxPool2d(2, 2)# 全连接层self.fc1 = nn.Linear(32*5*5, 120)self.fc2 = nn.Linear(120, 84)# 根据训练项目,调整类别数self.fc3 = nn.Linear(84, 10)#图像参数变化def forward(self, x): # input(3, 32, 32) x = F.relu(self.conv1(x)) #output(16, 28, 28)x = self.pool1(x) # output(16, 14, 14)x = F.relu(self.conv2(x)) # output(32, 10, 10)x = self.pool2(x) # output(32, 5, 5)x = x.view(-1, 32*5*5) # output(32*5*5)x = F.relu(self.fc1(x)) # output(120)x = F.relu(self.fc2(x)) # output(84)x = self.fc3(x) # output(10)return x
网络结构如下,下面将对每一层做一个介绍:

网络中feature map的变化大致如下:

LeNet实例应用
-
数据预处理
# 对数据进行预处理
transform = transforms.Compose([# 将输入的 numpy.ndarry[h*w*c]转变为[c*h*w],像素点值从[0,255],标准化为[0,1]transforms.ToTensor(),# 将数据进行标注化transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]
)
-
数据读取
如果是初次使用CIFAR,需要将download打开,也可以自行通过其他方式进行下载。
# 读取数据-训练集
train_set = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=36, shuffle=False, num_workers=0)
-
定义网络
通过LeNet中的介绍,完成网络的定义。
-
定义损失函数和优化器
pytorch支持很多损失函数和优化器,可以根据需要进行设定
# 定义损失函数
loss_function = nn.CrossEntropyLoss()# 定义优化器
optimizer = optim.Adam(net.parameters(), lr=0.001)
-
模型训练
# 开始训练,设置迭代轮次 epoch
for epoch in range(3):# 损失函数值running_loss = 0.0for step, data in enumerate(train_loader, start=0):inputs, labels = data# 清除梯度累加值optimizer.zero_grad()outputs = net(inputs.to(device))# 计算损失值loss = loss_function(outputs, labels.to(device))# 计算梯度loss.backward()# 参数更新optimizer.step()# 输出损失值running_loss += loss.item()if step % 500 == 499:with torch.no_grad():outputs = net(val_image.to(device))# 输出最大概率predict_y = torch.max(outputs, dim=1)[1]accuracy = (predict_y == val_label.to(device)).sum().item() / val_label.size(0)print('[%d, %5d] train_Loss:%.3f tese_accuracy: %.3f' % (epoch + 1, step + 1, running_loss/500, accuracy))running_loss = 0.0print('train finished')
-
保存模型
# 保存模型
save_path = './Lenet.pth'
torch.save(net.state_dict(), save_path)
补充
-
Pytorch中tensor的顺序是:[batch, channel, height, width]
-
卷积层中计算输出大小

-
W表示输入图像的Weight,一般Weight=hight
-
F表示核的大小,核大小一般为F * F
-
P表示Padding,Conv2d中默认是0
-
S表示步长
因此对于32*32的输入,在该网络中Output=(32-5+2*0)/1 +1 = 28
-
池化层只改变特征的高和宽,不改变深度
因此对于16*28*28,经过MaxPooling后变成了16*14*14
相关文章:
神经网络-LeNet
LeNet在1990年被提出,是一系列网络的统称,包括了LeNet1~LeNet5,对于神经网络的学习者来说,大家对下面这个图一定很熟悉,该图是对LeNet的简化展示。 在LeNet中已经提出了卷积层、Pooling层等概念,只是但是由…...
es 中 terms set 使用
在 Elasticsearch 中,terms_set 查询通常用于在一个字段上进行多值匹配,并支持设置一个条件(例如最小匹配数量),让查询结果更具灵活性。为了展示如何使用 terms_set 查询,我们首先会创建一个索引࿰…...
绩效考核试题
1.2.绩效考核 ()通过财务、客户、内部运营、学习与成长4个角度,将组织战略目标逐层分解转化为细化指标,有差异地针对不同的指标进行不同时期的绩效评估,有助于组织战略目标的实现。 A目标管理法 B平衡计分卡法 C硬性分…...
停车管理系统:构建安全、便捷的停车环境
Tomcat 简介 只要学习Java Web项目就不得不学习Tomcat。Tomcat是一种免费的开源的一种Java Web项目的容器,完美继承了 Apache服务器的特性,并且里面添加可以自动化运行的Java Web组件,让Java Web项目可以完全的运行到Tomcat里面。对于特大型项…...
十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)
目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump,俗称跑飞了。 参考cmbacktrace,在瑞萨RZN2L/T2M实现栈回溯,串口打印…...
联通光猫怎么自己改桥接模式?
环境: 联通光猫 ZXHN F677V9 硬件版本号 V9.0 软件版本号 V9.0.0P1T3 问题描述: 联通光猫怎么自己改桥接模式 家里用的是ZXHN F677V9 光猫,最近又搞了个软路由,想改桥接模式 解决方案: 1.拿到最新超级密码&…...
突围边缘:OpenAI开源实时嵌入式API,AI触角延伸至微观世界
当OpenAI宣布开源其名为openai-realtime-embedded-sdk的实时嵌入式API时,整个科技界都为之震惊。这一举动意味着,曾经遥不可及的强大AI能力,如今可以被嵌入到像ESP32这样的微型控制器中,真正地将AI的触角延伸到了物联网和边缘计算…...
springBoot Maven 剔除无用的jar引用
目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后,经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关,这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…...
malloc 分配大堆块(128KB)的一次探索
前言 一次意外执行了 malloc(0x5000),结构使用 gdb 调试发现其分配的位置在 TLS 区域,这令我不解(:最后去看了下 malloc 源码和 mmap 源码实现,发现似乎可能是 gdb 插件的问题,乐 场景复现 #include <…...
Android -- 双屏异显之方法二
Android – 双屏异显之方法二: DisplayManager PS: 1. 使用改方法主板需连接至少两个输出显示屏; 2. 副屏内部实现与MediaRouter下一样;使用方法 # 主屏activity内: private SecondDisplay secondDisplay;private void dualScreen3288() {D…...
电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误:原因与解决方案 在日常电脑使用中,我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件,如CorelDRAW(简称CDR)时,可能会遇到“计算…...
使用RDMA技术构建无损网络
如何使用RDMA构建无损网络? 在深入研究RDMA和无损网络领域后,会经常遇到两个基本问题:为什么采用无损网络至关重要?这些先进技术有什么优势? 无损网络是一种新型的网络技术,它可以在不丢失数据包的情况下传…...
vscode 识别git目录
vscode 偶尔无法识别使用git 新托管的项目。 以下是我提供的解决方案——重启 git.enabled VS Code配置问题: 有时候,VS Code的配置可能会导致无法识别.git文件夹。确保你的VS Code配置中启用了Git的相关功能。你可以通过”Settings”(设置…...
OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个2D点集之间的具有4个自由度的最优有限仿射变换。 cv::estimateAffinePartial2D 是 OpenCV 库中的一个函数,用于计算两个二维…...
StarRocks 生产部署一套集群,存储空间如何规划?
背景:StarRocks 3.2,存储一体 使用场景:多分析、小查询多单但不高、数据量几百T FE 存储 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的 HDD 存储,…...
JVM执行引擎JIT深度剖析
前端编译与后端编译 Java 程序的编译过程是分两个部分的。一个部分是从java文件编译成为class文件,这一部分也称为前端编译。另一个部分则是这些class文件,需要进入到 JVM 虚拟机,将这些字节码指令编译成操作系统识别的具体机器指令。这一部…...
【DOCKER】基于DOCKER的服务之DUFS
文件上传下载服务器:https://github.com/sigoden/dufs # 拉取镜像 docker pull sigoden/dufs# 创建数据卷文件夹 mkdir -p /data/.docker/volumes/dufs# 创建容器 docker run -id --restartalways --name dufs \-p 51080:5000 \-v /data/.docker/volumes/dufs:/dat…...
加密货币地址的基本概念
什么是地址? 在日常生活中,地址可能指房屋、电子邮件或官网的位置,用来精确定位在系统中的特定位置或端点。在加密货币领域,地址也起着类似的基础作用,只不过是在数字环境中。 加密货币地址是区块链网络中使用的唯一…...
如何在 Linux 服务器上部署 Pydio Cells 教程
简介 Pydio Cells 是一个开源的文档共享和协作平台,专为你的组织设计。它允许你在组织内部分享文档和文件,并让你完全掌控文档共享环境。 在本教程中,我们将向你展示如何在 Alma Linux 9 服务器上安装 Pydio Cells。你将使用 MariaDB 数据库…...
Halcon例程代码解读:安全环检测(附源码|图像下载链接)
安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…...
springboot基于uniapp的电竞社区论坛交流系统 小程序
目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分电竞特色功能技术实现要点运营辅助功能项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 注册登录&…...
从本地到云端:FastAPI服务器部署的5个必知要点(避坑指南)
从本地到云端:FastAPI服务器部署的5个必知要点(避坑指南) 当你兴奋地完成了一个FastAPI应用的开发,准备将它从本地环境迁移到云端服务器时,可能会遇到各种意想不到的问题。接口无法访问、性能突然下降、请求超时...这些…...
源荷储再创新!小论文轻松发!基于雨流计数法的源-荷-储双层协同优化配置研究Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
2025届学术党必备的六大降重复率工具实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 伴随人工智能生成内容,就是那个AIGC技术的广泛普及,各个大平台以及学…...
FastTimer嵌入式时间切片调度框架解析
1. FastTimer 库深度解析:嵌入式时间管理的工程化实践在嵌入式系统开发中,时间管理是底层驱动、状态机调度、周期性采样与事件分发的核心基础设施。传统millis()或micros()轮询方式虽简单,但存在精度漂移、逻辑耦合度高、多级周期嵌套困难等工…...
信托资金流向与交易对手辨析:钱给了谁,谁就是交易对手吗?
目录 一、 核心误区:资金流向 ≠ 交易对手 二、 谁才是真正的“交易对手”? 三、 如何一眼识别真正的交易对手? 总结 在信托业务和资产管理领域,很多初学者甚至从业者容易产生一个误区:认为信托公司把钱打给谁&…...
微波管参数全解析:什么是噪声系数?
摘要:上一篇我们聊了决定卫星生死的核心参数「效率」,今天来讲决定雷达、卫星性能下限的关键指标 ——噪声系数。为什么地面雷达能看清几百公里外一架几米长的飞机?为什么卫星能接收到地面几瓦发射机传来的微弱信号?答案从来不是 …...
基于File-Based App开发MVP项目母
Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...
lwIP 深度解析:TCP 错误回调函数 errf 的触发机制与实战应用
1. lwIP协议栈中的TCP错误处理机制 在嵌入式网络开发中,lwIP作为轻量级TCP/IP协议栈被广泛应用。理解其TCP错误处理机制对开发稳定可靠的网络应用至关重要。TCP协议通过错误回调函数(errf)向应用层报告连接异常,这就像是一个贴心的…...
从传统WinForm到现代化桌面应用:SunnyUI如何重塑C开发体验
从传统WinForm到现代化桌面应用:SunnyUI如何重塑C#开发体验 【免费下载链接】SunnyUI SunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。 项目地址: https://gitcode.com/gh_m…...
