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 垃圾分类系统,助力生态平衡
前 言 垃圾分类系统,传统的垃圾分类系统模式还处于线下管理阶段,管理效率极低。随着垃圾分类系统信息的不断增多,传统基于线下管理模式已经无法满足当前用户需求,随着信息化时代的到来。通过该系统的设计,管理员可以管…...

软件工程 设计的复杂性
复杂性代表事件或事物的状态,它们具有多个相互关联的链接和高度复杂的结构。在软件编程中,随着软件设计的实现,元素的数量以及它们之间的相互联系逐渐变得庞大,一下子变得难以理解。 如果不使用复杂性指标和度量,软件…...

Nginx 限制只能白名单 uri 请求的配置
实际生产项目中,大多数时候我们会将后端的 http 接口通过前置 nginx 进行反向代理,对互联网用户提供服务。往往我们后端服务所能提供的接口服务是大于互联网用户侧的实际请求的接口地址数量的(例如后端服务一共有100个api接口,经过…...

QT c++ 同时使用sqlite 和mysql数据库的问题
在项目开发中,同时使用了sqlite 和mysql数据库,分开这两部分运行功能都正常,但是一起运行,就异常,sqlite部分不能使用。 现象:出现如下提示 QSqlDatabasePrivate::addDatabase: duplicate connection nam…...

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip
redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后…...

【C++习题】19.数组中第K个大的元素
题目:数组中第K个大的元素 链接🔗:数组中第K个大的元素 题目: 代码: class Solution { public:int findKthLargest(vector<int>& nums, int k) {// 将数组中的元素先放入优先级队列中priority_queue<i…...

JIS-CTF: VulnUpload靶场渗透
JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162,攻击机IP地址192.168.23.140…...

BGP-面试
简单介绍一下BGP BGP,边界网关协议,属于路径矢量路由协议。属于触发式更新或者增量更新。具有丰富的路由策略,能够灵活的进行路由选择。重心不是在路由学习,而是路由优选、更高效的传递路由和维护大量的路由信息。基于TCP…...

Git-安装与常用命令
目录 1.Git环境配置 1.1下载 1.2配置 1.2.1基本配置 1.2.2常用指令配置别名 1.2.3获取本地仓库 git命令在git bash中演示,会用到一些Linux命令。 1.Git环境配置 1.1下载 Git下载地址:https://git-scm.com/download 傻瓜式安装就可以了。 安装…...

回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测
目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测 模型设计 基于BiLSTM-Adaboost的回归预测模型结合了双向长短期记忆神经网络(BiLSTM)和Adaboost集成学习的…...

微信小程序跳转其他小程序以及跳转网站
一、跳转其他小程序 1.1 知道appid和页面路径 wx.navigateToMiniProgram({appId: appid, // 替换为目标小程序 AppIDpath: pathWithParams, // 小程序路径envVersion: release, // 开发版、体验版或正式版success(res) {console.log("跳转到其他小程序成功!&q…...