一文彻底搞懂CNN - 手写数字识别(LeNet-5)

LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,是深度学习领域中的早期重要里程碑之一。它是第一个成功应用于手写数字识别的卷积神经网络,标志着深度学习在计算机视觉领域的初步应用。

MNIST数据集

LeNet-5以其简洁而有效的结构,成为了早期卷积神经网络中最具代表性之一。它成功奠定了卷积神经网络在计算机视觉领域的地位。

LeNet-5

一、CNN奠基论文

在深度学习领域,卷积神经网络(CNN)的奠基之作非Yann LeCun与Yoshua Bengio(花书《深度学习》作者之一)等人所著的《Gradient-Based Learning Applied to Document Recognition》莫属。

人工智能三巨头

该论文深入解析了LeNet网络架构,其在手写体识别上的突破性成就,为CNN的后续发展奠定了坚不可摧的基石。

LeNet-5

首先,论文介绍了传统模式识别方法在处理复杂图像数据时面临的挑战,特别是手工设计特征提取器的局限性。

  • 传统方法局限性:传统模式识别方法依赖于手工设计的特征提取器,这些方法在处理复杂图像数据时存在局限性,如无法有效应对图像中的平移、形变和扭曲等变化。

  • 全连接网络的不足:全连接网络虽然可以作为分类器,但在处理图像数据时存在两个问题:一是参数过多,导致训练困难;二是忽略了输入数据的拓扑结构(如图像的空间相关性)。

传统模式识别方法

随后,作者提出了使用多层神经网络(特别是卷积神经网络)来解决这些问题,因为这些网络能够从大量数据中学习复杂的、高维的、非线性的映射。

  • 局部感受野:CNN通过局部感受野机制,每个神经元只连接输入数据的一个局部区域,这有助于提取图像的局部特征。

  • 权值共享:同一特征图中的所有神经元共享相同的权值,这使得网络能够检测图像中不同位置的相同特征,从而实现位移不变性。

  • 下采样(池化):通过池化操作降低特征图的维度,减少计算量,并增强模型对形变的鲁棒性。

CNN识别方法

二、LeNet-5网络结构

**LeNet-5是论文中提出的经典卷积神经网络结构,主要由两个卷积层、两个池化层、两个全连接层和一个输出层组成,用于手写数字识别。**其结构主要包括以下几个部分:

LeNet-5

  1. 输入层:接收归一化大小的字符图像,通常图像中的字符位于中心位置。

  2. 卷积层(C1):

  • 使用多个卷积核(6@28*28)对输入图像进行卷积操作,每个卷积核对应一个特征图。

  • 每个特征图的神经元通过局部感受野连接输入图像的一个局部区域,并共享相同的权值。

  1. 池化层(S2):
  • 对C1层的特征图进行下采样操作(6@14*14),通常采用最大池化或平均池化。

  • 减少特征图的维度,降低计算量,并增强模型的鲁棒性。

  1. 第二个卷积层(C3):
  • 对S2层的输出进行进一步的卷积操作(16@10*10),提取更高级别的特征。

  • C3层的特征图与S2层的特征图之间可能存在复杂的连接模式,具体取决于网络设计。

  1. 第二个池化层(S4):
  • 对C3层的特征图进行下采样操作(16@5*5),进一步减少特征图的维度。
  1. 全连接层(C5):
  • 将S4层的输出展平为一维向量,并连接到全连接层。

  • 全连接层中的每个神经元都与前一层的所有神经元相连。

  1. 输出层:
  • 全连接层的输出连接到输出层,输出分类结果。

  • 对于手写体识别任务,输出层通常包含与类别数相等的神经元,每个神经元对应一个类别的概率。

三、LeNet-5模型训练__

LeNet-5模型训练: 论文深入探讨了利用梯度下降法,特别是结合反向传播算法,来训练LeNet-5网络模型。

该过程通过计算损失函数对网络参数的梯度,随后沿梯度的负方向迭代更新参数,使网络逐步优化,从而精准学习从输入图像到输出类别的复杂映射关系。

模型训练

反向传播(Back Propagation): 反向传播算法利用链式法则,通过从输出层向输入层逐层计算误差梯度,高效求解神经网络参数的偏导数,以实现网络参数的优化和损失函数的最小化。

反向传播

损失函数(Loss Function): 用于衡量模型预测值与真实值之间的差距。损失函数越小,模型的预测性能就越好。

损失函数

梯度下降(Gradient Descent 从一个初始点出发,沿着损失函数的负梯度方向不断更新参数,直到达到一个局部最小值或者全局最小值。

梯度下降

随机梯度下降(SGD): 随机梯度下降在每次迭代中仅随机选择一个样本来计算损失函数的梯度,并根据这个梯度来更新模型的一个或多个参数。

随机梯度下降

批量梯度下降(BGD):与随机梯度下降不同, 在每次迭代中,批量梯度下降使用整个数据集来计算损失函数的梯度,并根据这个梯度来更新模型的所有参数。

批量梯度下降

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Python面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计方法,它将数据和操作数据的方法组合成对象,通过定义类(class)来创建对象。下面是一些概念和原则,可以帮助你更好地理解Python面向对象编程。 1. 类和对象: - 类是一种抽象的数据类型,它定义了对象的属性和方法。 - 对象是类的实例,它具有类定义的属性和方法。 2. 属性和方法: - 属性是对象的数据,可以是整数、字符串、列表等。 - 方法是对象的行为,可以是函数或过程。 3. 封装: - 封装是将数据和对数据的操作封装在一起,以创建一个独立的实体。 - 使用类来封装数据和方法,可以隐藏实现细节,提高代码的可读性和可维护性。 4. 继承: - 继承是一种机制,允许一个类继承另一个类的属性和方法。 - 子类可以重用父类的代码,并且可以添加新的属性和方法。 5. 多态: - 多态是指同一个方法可以在不同的类中具有不同的实现方式。 - 多态可以提高代码的灵活性和可扩展性。 下面是一个简单的例子,展示了如何定义一个类、创建对象并调用对象的方法: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, my name is {self.name} and I'm {self.age} years old.") # 创建对象 person = Person("Alice", 25) # 调用对象的方法 person.say_hello() ``` 这个例子定义了一个名为`Person`的类,它有两个属性(`name`和`age`)和一个方法(`say_hello`)。我们通过`Person`类创建了一个名为`person`的对象,并调用了它的`say_hello`方法。 希望这个简单的例子能帮助你更好地理解Python面向对象编程。如果你有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值