LeNet-5:深度学习与卷积神经网络的里程碑
目录
编辑
引言
LeNet-5的结构与原理
输入层
C1层:卷积层
S2层:池化层
C3层:卷积层
S4层:池化层
C5层:卷积层
F6层:全连接层
输出层
LeNet-5的算法基础
LeNet-5的优点
LeNet-5的现代应用
深度学习的发展历程
感知机与多层感知机
反向传播算法与卷积神经网络
深度学习的重大突破
深度学习的现代应用
深度学习的挑战与未来
结论
引言
在人工智能的发展历程中,LeNet-5不仅是一个技术突破,更是深度学习和卷积神经网络(CNN)发展史上的一个重要里程碑。由Yann LeCun等人在1998年提出,LeNet-5最初被设计用于手写数字识别任务,其成功应用不仅证明了深度学习在图像识别领域的潜力,也为后续的深度学习研究和应用奠定了坚实的基础。本文将详细解析LeNet-5的原理、结构、算法基础,并探讨其在现代深度学习应用中的影响和深度学习的发展历程。
LeNet-5的结构与原理
LeNet-5的网络结构简洁而高效,它包含7层(不包括输入层),由两个卷积层、两个池化层和三个全连接层组成。这种结构在当时是一个创新,因为它能够自动从图像中提取特征,而不需要人工设计特征提取器。
输入层
LeNet-5的输入层接收一个32x32像素的灰度图像,这是网络的起点,图像数据将从这里开始流经整个网络。
import torch
import torch.nn as nn# 定义输入图像的尺寸
input_image_size = (1, 32, 32) # 1代表灰度图像的通道数# 创建一个模拟输入张量,代表一个批次中的多个图像
input_tensor = torch.randn(10, *input_image_size) # 假设一个批次有10张图像
C1层:卷积层
C1层是LeNet-5的第一个卷积层,它使用6个5x5大小的卷积核,步长为1,不使用零填充,卷积操作后得到6个28x28的特征图。
# 定义C1层的卷积操作
conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=0)# 应用卷积操作到输入张量
feature_maps_c1 = conv1(input_tensor)
print("C1层特征图尺寸:", feature_maps_c1.shape) # 应该输出: torch.Size([10, 6, 28, 28])
S2层:池化层
S2层是一个2x2的最大池化层,它将C1层的特征图尺寸降低到14x14,这有助于减少计算量,并增加网络的平移不变性。
# 定义S2层的最大池化操作
pool2 = nn.MaxPool2d(kernel_size=2, stride=2)# 应用池化操作到C1层的特征图
feature_maps_s2 = pool2(feature_maps_c1)
print("S2层特征图尺寸:", feature_maps_s2.shape) # 应该输出: torch.Size([10, 6, 14, 14])
C3层:卷积层
C3层是LeNet-5的第二个卷积层,它使用16个5x5大小的卷积核,步长为1,不使用零填充,卷积操作后得到16个10x10的特征图。
# 定义C3层的卷积操作
conv3 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1, padding=0)# 应用卷积操作到S2层的特征图
feature_maps_c3 = conv3(feature_maps_s2)
print("C3层特征图尺寸:", feature_maps_c3.shape) # 应该输出: torch.Size([10, 16, 10, 10])
S4层:池化层
S4层是LeNet-5的第二个池化层,它同样使用2x2的最大池化,将C3层的特征图尺寸降低到5x5。
# 定义S4层的最大池化操作
pool4 = nn.MaxPool2d(kernel_size=2, stride=2)# 应用池化操作到C3层的特征图
feature_maps_s4 = pool4(feature_maps_c3)
print("S4层特征图尺寸:", feature_maps_s4.shape) # 应该输出: torch.Size([10, 16, 5, 5])
C5层:卷积层
C5层是LeNet-5的第三个卷积层,它使用120个5x5大小的卷积核,步长为1,不使用零填充,卷积操作后得到120个1x1的特征图,这些特征图实际上是高维特征向量。
# 定义C5层的卷积操作
conv5 = nn.Conv2d(in_channels=16, out_channels=120, kernel_size=5, stride=1, padding=0)# 应用卷积操作到S4层的特征图
feature_maps_c5 = conv5(feature_maps_s4)
print("C5层特征图尺寸:", feature_maps_c5.shape) # 应该输出: torch.Size([10, 120, 1, 1])
F6层:全连接层
F6层是LeNet-5的第一个全连接层,它将C5层的输出展平后连接到84个神经元,这一步是特征的进一步整合和抽象。
# 定义F6层的全连接操作
fc6 = nn.Linear(in_features=120, out_features=84)# 展平C5层的特征图并应用全连接操作
output_f6 = fc6(feature_maps_c5.view(-1, 120)) # 展平特征图
print("F6层输出尺寸:", output_f6.shape) # 应该输出: torch.Size([10, 84])
输出层
输出层是LeNet-5的第二个全连接层,它输出10个神经元,对应于10个类别,使用softmax函数进行多分类。
# 定义输出层的全连接操作
output_layer = nn.Linear(in_features=84, out_features=10)# 应用全连接操作到F6层的输出
output = output_layer(output_f6)
print("输出层尺寸:", output.shape) # 应该输出: torch.Size([10, 10])
LeNet-5的算法基础
LeNet-5的训练算法与传统的反向传播算法(Backpropagation, BP)相似,包括前向传播和反向传播两个阶段:
- 前向传播:输入样本通过每一层的变换,计算实际输出。
- 反向传播:计算实际输出与理想输出的差值,并通过链式法则反向传播误差,调整权值以最小化误差。
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(params=[conv1.weight, conv1.bias, pool2, conv3.weight, conv3.bias, pool4, conv5.weight, conv5.bias, fc6.weight, fc6.bias, output_layer.weight, output_layer.bias], lr=0.01)# 模拟一个训练步骤
for images, labels in dataset: # 假设dataset是包含图像和标签的数据集optimizer.zero_grad() # 清空梯度outputs = output_layer(fc6(conv5(pool4(conv3(pool2(conv1(images))))))) # 前向传播loss = criterion(outputs, labels) # 计算损失loss.backward() # 反向传播optimizer.step() # 更新权重
LeNet-5的优点
LeNet-5相较于传统神经网络,在图像处理方面具有以下优点:
- 参数共享:卷积层中的权重共享减少了模型参数,降低了过拟合风险。
- 平移不变性:由于卷积操作的特性,网络对图像中的平移具有不变性。
- 特征提取:网络能够自动学习图像特征,无需手动设计特征提取器。
LeNet-5的现代应用
LeNet-5的成功证明了深度学习网络在图像识别方面的潜力,激发了该领域的进一步研究和开发。LeNet的影响延伸到许多实际应用中,包括:
- 文件处理:用于扫描和分析文档、解析和处理不同类型的信息、从文档中提取数据以及自动化数据输入任务。
- 手写识别:LeNet在识别手写字符和数字方面的成功仍然是光学字符识别(OCR)系统的基础。
- 生物认证:LeNet的手写识别功能已应用于签名和指纹分析,使生物识别认证方法成为可能,并增强了安全系统。
- 实时视频分析:LeNet中的基本概念是实时视频分析的基础,例如对象跟踪、监控系统、面部识别和自动驾驶汽车。
- 图像分类:LeNet的原理影响着现代图像分类系统,应用包括对图像中的物体进行分类和分类,用于多个领域。
深度学习的发展历程
深度学习的发展可以追溯到上世纪五十年代,从最初的感知机模型到现代的卷积神经网络和循环神经网络。深度学习技术在计算机视觉、自然语言处理、语音识别与合成、推荐系统、无人驾驶汽车、游戏智能、生物医学等领域取得了重大突破。
感知机与多层感知机
深度学习的发展历程可以追溯到上世纪五十年代。当时,心理学家Frank Rosenblatt提出了感知机(Perceptron)模型,这是最早的神经网络模型之一。感知机能够学习并识别简单的模式,如二分类问题。然而,由于其局限性,感知机无法处理复杂的问题,如异或(XOR)运算。
为了克服感知机的局限性,研究者们提出了多层感知机(Multi-Layer Perceptron,MLP)的概念。MLP通过在感知机之间添加隐藏层,提高了模型的复杂度,从而能够处理更复杂的问题。然而,多层感知机在训练过程中容易陷入局部最优解,导致训练效果不佳。
反向传播算法与卷积神经网络
反向传播算法(Backpropagation, BP)的研究突破使得多层神经网络的训练成为可能。这一算法通过计算损失函数关于网络参数的梯度,实现了有效的网络参数更新。Yann LeCun等人在1989年构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本。LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近。
深度学习的重大突破
2012年,Hinton组在ImageNet图像识别大赛中提出了AlexNet,这一模型引入了深层结构和dropout方法,将错误率从25%以上降低到了15%,颠覆了图像识别领域。AlexNet的成功证明了深度学习在大规模图像识别任务中的潜力,开启了深度学习在计算机视觉领域的新篇章。
深度学习的现代应用
深度学习技术的发展不仅推动了图像识别领域的发展,还在自然语言处理、语音识别、推荐系统等多个领域取得了重大突破。例如,在自然语言处理领域,深度学习模型如Transformer和BERT在语言翻译、文本摘要等任务中取得了前所未有的成果。在语音识别领域,深度学习模型显著提高了语音到文本转换的准确性。在推荐系统领域,深度学习技术能够更好地理解用户偏好,提供个性化推荐。
深度学习的挑战与未来
尽管深度学习技术取得了显著的成果,但仍面临着诸多挑战,如模型的可解释性、模型压缩、数据隐私与安全、少样本学习与迁移学习、强化学习与自适应系统等。未来的发展趋势包括模型结构与算法创新、模型与数据融合、自动化机器学习(AutoML)等方向。深度学习框架与工具,如TensorFlow、PyTorch、Keras等,也在不断地发展和完善,以满足不断增长的计算需求。
结论
LeNet-5作为深度学习领域的一个早期模型,为现代卷积神经网络的发展奠定了基础。了解和探究LeNet-5的工作原理和应用场景,有助于我们更好地理解深度学习的原理和发展历程。随着深度学习技术的不断发展,我们期待它在更多领域创造新的可能,为人类社会带来更多的便利和价值。
相关文章:

LeNet-5:深度学习与卷积神经网络的里程碑
目录 编辑 引言 LeNet-5的结构与原理 输入层 C1层:卷积层 S2层:池化层 C3层:卷积层 S4层:池化层 C5层:卷积层 F6层:全连接层 输出层 LeNet-5的算法基础 LeNet-5的优点 LeNet-5的现代应用 …...

从资产流动分析WIF市场潜力X.game深究其他未知因素
近日,两则关于WIF最新消息引起了投资者们的注意。据报道,11月28日Vintermute在过去13小时内累计从Binance交易所提取了价值533万美元的WIF,此举不仅彰显了其强大的资金实力,更在某种程度上推动了WIF币价的反弹;另一方面…...

深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理
深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理 响应式系统的基本原理 作为一个热门的JavaScript框架,Vue在3.x版本中引入了基于Proxy的响应式系统。这个系统的核心思想是利用Proxy对象拦截对数据的访问和修改,从而实现数据的自动更…...

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案 3、工程详细设计方案工程设计原理框图用户数据发送模块基于GTP高速接口的数据回环传输架构GTP IP 简介GTP 基本结构GTP 发送和接收…...

Linux网络 UDP socket
背景知识 我们知道, IP 地址用来标识互联网中唯一的一台主机, port 用来标识该主机上唯一的一个网络进程,IPPort 就能表示互联网中唯一的一个进程。所以通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp&…...
如何持续优化呼叫中心大模型呼入机器人的性能?
如何持续优化呼叫中心大模型呼入机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼入机器人的性能是一个复杂而细致的过程,它涉及到数据、模型结构…...

鸿蒙项目云捐助第四讲鸿蒙App应用的登陆注册页实现
根据app的操作流程可以知道,当启动页启动后,点击启动页中的页面就进入到了登录页。本讲就是针对于登录注册页的实现,实现的界面参考下图。 这里根据这个素材的参考实现鸿蒙Next云捐助的登录页。 一、鸿蒙Next云捐助登录页的实现 在项目中继…...

Windows本地搭建Redis集群(集群模式)
手打不易,如果转摘,请注明出处! 注明原文:https://blog.csdn.net/q258523454/article/details/144477957 前言 Redis版本:redis 5.0.14.1 Windows版本:Windows10 本文只讲集群模式 1. 安装Redis 1.1 …...

使用FastGPT制做一个AI网站日志分析器
越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...

探索 Echarts 绘图:数据可视化的奇妙之旅
目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表:柱状图的诞生 四、图表的美化与定制:让数据更具吸引力 1. 主题切换:一键变换风格 2. 颜色调整:色彩搭配的艺术 3. 标签与提示框:丰富信…...
网络基础(IP和端口)
网络连接的核心-TCP/IP体系结构(IP和端口) 什么是IP地址 1.IP地址是电子设备(计算机)在互联网上的唯一标识 2.用来在互联网中寻找电脑 IP 地址就像是你家的地址一样,不过它是在网络世界里用来找到一台电脑或者其他网…...

UE4与WEB-UI通信
前端HTML代码 <!DOCTYPE html><html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>test web ui</title><script src"https://cdn.b…...
前缀和与差分算法详解
定义 前缀和是一种数据预处理技术,它指的是从数组的第一个元素开始,到当前元素为止的所有元素的和。这种技术可以快速计算任意区间内元素的和,而不需要每次都从头开始累加。 差分则是前缀和的逆运算,它主要用于处理对数组某个区…...

《深入探究:C++ 在多方面对 C 语言实现的优化》
目录 一、C 在 C 上进行的优化二、C 关键字(C 98)三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…...

React 第十六节 useCallback 使用详解注意事项
useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook,返回一个函数的 memoized的值; 2、如果多次传入的依赖项不变,那么多次定义的时候,返回的值是相同的,防止频繁触发更新; 3、多应用在 父组件为函…...

使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...
评估一套呼叫中心大模型呼入机器人的投入回报比?
评估一套呼叫中心大模型呼入机器人的投入回报比? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼入机器人的投入回报比(ROI),是一个多…...

十八、Label 和 Selector
Label 是键值对,用来标识 Kubernetes 资源(如 Pod、Node、Service 等)的属性。它们并不直接影响资源的行为,但可以帮助用户快速组织、查询和操作这些资源。标签可以用于选择、过滤和分组。 Label: 标签对 k8s 中各种资源进行分类、分组,如Pod和节点进行分组。通过添加kev…...

实现按键按下(低电平)检测到下降沿
按照流程进行编程 步骤1: 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…...
解析 SSM 垃圾分类系统,助力生态平衡
前 言 垃圾分类系统,传统的垃圾分类系统模式还处于线下管理阶段,管理效率极低。随着垃圾分类系统信息的不断增多,传统基于线下管理模式已经无法满足当前用户需求,随着信息化时代的到来。通过该系统的设计,管理员可以管…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...