当前位置: 首页 > news >正文

【TensorFlow深度学习】LeNet-5卷积神经网络实战分析

LeNet-5卷积神经网络实战分析

      • LeNet-5卷积神经网络实战分析:从经典模型到现代实践
        • LeNet-5的历史背景
        • LeNet-5网络架构
        • 实战代码解析
        • 实战分析
        • 结论

LeNet-5卷积神经网络实战分析:从经典模型到现代实践

在深度学习的历程中,LeNet-5无疑是一座里程碑,它不仅标志着卷积神经网络(CNN)在图像识别任务中的首次成功应用,也为后续的深度学习发展奠定了坚实基础。本文将带您深入LeNet-5的结构与实战实现细节,通过代码解析,展现其在MNIST手写数字识别任务中的应用,揭示其设计理念与实践价值。

LeNet-5的历史背景

1990年代,由Yann LeCun等人提出的LeNet-5,以其简洁的架构和高效的性能,引领了卷积神经网络在商业化应用的潮流,特别是在邮政编码识别和支票处理等任务上大放异彩。这一开创性工作不仅验证了CNN在处理视觉数据方面的潜力,也促进了后来深度学习领域的蓬勃发展。

LeNet-5网络架构

LeNet-5由两个卷积层、两个下采样层(现常采用最大池化层替代)、以及三个全连接层组成。原始输入尺寸为32x32,经过两层卷积和池化后,特征图尺寸逐渐减少,最终通过展平层(Flatten)转换为一维向量,接入全连接层进行分类决策。

实战代码解析

使用TensorFlow 2.0,我们可以便捷地复现并运行LeNet-5模型。以下是关键代码段:

import tensorflow as tf
from tensorflow.keras import Sequential, layers# 定义LeNet-5模型
def create_lenet5():model = Sequential([layers.Conv2D(6, kernel_size=3, strides=1, padding='SAME', activation='relu'),  # 卷积层1layers.MaxPooling2D(pool_size=2, strides=2),  # 池化层1layers.Conv2D(16, kernel_size=3, strides=1, padding='SAME', activation='relu'),  # 卷积层2layers.MaxPooling2D(pool_size=2, strides=2),  # 池化层2layers.Flatten(),  # 展平层layers.Dense(120, activation='relu'),  # 全连接层1layers.Dense(84, activation='relu'),  # 全连接层2layers.Dense(10)  # 输出层])return model# 创建模型实例
network = create_lenet5()# 构建模型,指定输入形状
network.build(input_shape=(None, 28, 28, 1))# 打印模型摘要
network.summary()# 编译模型
network.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])# 加载MNIST数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = x_train[..., tf.newaxis].astype('float32')
x_test = x_test[..., tf.newaxis].astype('float32')# 训练模型
history = network.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))# 测试准确率
test_loss, test_acc = network.evaluate(x_test, y_test, verbose=2)
print('\nTest accuracy:', test_acc)
实战分析
  1. 模型初始化:通过Sequential模型,逐层构建LeNet-5。首先定义两个卷积层,激活函数使用ReLU,以增强非线性表达能力。

  2. 池化层:原论文中的下采样层被现代化的MaxPooling层替代,有效减少计算量同时保持特征图的显著部分。

  3. 全连接层:在特征提取之后,通过Flatten层将数据展平,然后通过几个全连接层进行分类决策。

  4. 数据预处理:将MNIST数据集标准化并扩展维度,适应CNN的输入要求。

  5. 模型编译与训练:使用Adam优化器和SparseCategoricalCrossentropy损失函数(考虑logits直接计算),进行模型编译。训练5个epochs以快速展示模型性能。

  6. 性能评估:最后,测试集上的准确率显示模型的泛化能力。

结论

LeNet-5虽结构简单,但其设计理念和应用成效深远,是深度学习历史上不可忽视的篇章。通过现代框架TensorFlow的实现,我们不仅重温了这一经典模型的魅力,也体会到深度学习框架在简化模型构建、训练过程中的强大优势。对于初学者而言,理解LeNet-5不仅是一次技术之旅,更是深度学习思想的启蒙。随着技术进步,虽然现代网络模型更为复杂且功能强大,但LeNet-5作为基石,其历史地位和教学价值依旧不可磨灭。

相关文章:

  • 2024华为OD机试真题-机场航班调度-C++(C卷D卷)
  • python程序控制结构
  • 前端基础1-6 :es6
  • 【Unity知识点详解】Addressables的资源加载
  • K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动
  • 代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)
  • 记一次服务器数据库被攻击勒索
  • 【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)
  • 数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局
  • Chrome谷歌浏览器如何打开不安全页面的禁止权限?
  • Keil 5恢复默认布局,左边状态栏
  • 基于java的CRM客户关系管理系统(二)
  • .NET 快速重构概要1
  • FPGA高端项目:FPGA解码MIPI视频+图像缩放+视频拼接,基于MIPI CSI-2 RX Subsystem架构实现,提供4套工程源码和技术支持
  • element-plus 使el-dropdown只显示当前选择节点
  • [译]前端离线指南(上)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • “大数据应用场景”之隔壁老王(连载四)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Apache Pulsar 2.1 重磅发布
  • es6要点
  • GraphQL学习过程应该是这样的
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaWeb(学习笔记二)
  • Linux快速复制或删除大量小文件
  • linux学习笔记
  • node-glob通配符
  • Vue2 SSR 的优化之旅
  • 初识 webpack
  • 观察者模式实现非直接耦合
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 将回调地狱按在地上摩擦的Promise
  • 十年未变!安全,谁之责?(下)
  • 时间复杂度与空间复杂度分析
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 为视图添加丝滑的水波纹
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Linux(权限管理)
  • #图像处理
  • (1)虚拟机的安装与使用,linux系统安装
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (正则)提取页面里的img标签
  • (转)http-server应用
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .htaccess配置重写url引擎
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions