深度学习---卷积神经网络之LeNet5(TensorFlow 代码实现)

article/2025/7/2 21:11:51

一、前言

1.1 使用全连接神经网络对图像进行处理存在的问题

1、需要处理的数据量大,效率低

现在的图像都有着极高的像素,假设一张需要处理的图片像素是 1000 * 1000 * 3(彩色图片,具有 RGB 3 个通道),使用具有 100 个隐藏单元的单隐藏层 MLP,模型就有 1000 * 1000 * 3 * 100 = 3 亿个参数,这个模型需要训练的参数数量是巨大的,使用全连接网络训练效率极为低下。

2、图像在维度调整过程中难以保留原有的特征,导致图像处理的准确度不高

回想一下,之前我们将多层感知机模型应用于MNIST数据集中的手写数字图片。 为了能够应用多层感知机,我们首先将每个大小为 28×28 的图像展平为一个 784 维的固定长度的一维向量,然后用全连接层对其进行处理。

当我们对图像进行 Flatten 处理时,很可能改变了图像所表示的信息。举例如下:

假如有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但从图像的角度来看,图像的内容(本质)并没有发生变化,只是位置发生了变化。

1.2 卷积神经网络(CNN)的构成

CNN 网络主要有三部分构成: 卷积层、池化层(汇聚层)和全连接层组成,其中卷积层负责提取图像中的局部特征;池化层用来降低参数数量(降维);全连接层类似人工神经网络的部分,用来输出想要的结果。

了解卷积操作可参考这篇文章: 卷积神经网络(CNN)——图像卷积_HS_zhangjiong的博客-CSDN博客_图卷积神经网络实现

本文介绍卷积神经网络中的开山之作---LeNet

参考论文---《Handwritten Digit Recognition with a Back-Propagation Network》、《Gradient-Based Learning Applied to Document Recognition》 

二、LeNet 介绍

LeNet 是一系列网络结构,包括 LeNet1-LeNet5。它最早发布的卷积神经网络之一,因其在计算机视觉任务中的高效性能而受到广泛关注。 这个模型是由贝尔实验室的研究员Yann LeCun在1989年提出的(并以其命名),目的是识别图像中的手写数字。

总体来看,LeNet(LeNet-5)由两个部分组成:

  • 卷积编码器: 由两个卷积层组成;

  • 全连接层密集块: 由三个全连接层组成

如下图所示:

论文中的 LeNet-5 网络架构图如下:

 

每个卷积块中的基本单元是一个卷积层、一个 sigmoid 激活函数和平均汇聚层。每个卷积层使用 5×5 卷积核和一个 sigmoid 激活函数。这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一个卷积层有6个输出通道,而第二个卷积层有16个输出通道。每个 2×2 池化操作(strides = 2)通过空间下采样将维数减少4倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。

为了将卷积块的输出传递给稠密块,我们必须在小批量中展平每个样本。换言之,我们将这个四维输入(batch_size, height, width, channel)转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的样本,第二个维度给出每个样本的平面向量表示。LeNet 的稠密块有三个全连接层,分别有120、84和10个输出。因为我们在执行分类任务,所以输出层的10维对应于最后输出结果的数量。

三、LeNet-5 代码实现(TensorFlow)

本文使用的 tensorflow 版本为 2.10.0。

论文中 LeNet 池化层使用的是平均池化层,后续证明最大池化更有效,所以本文使用最大池化层。

同时本文的数据集是 MNIST 数据集。

import tensorflow as tf
# 数据集
from tensorflow.keras.datasets import mnist

1. 数据集加载

# 数据集加载
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
test_labels.shape

2. 数据处理

卷积神经网络的输入要求是: B, H, W, C

批量大小、图片高度、宽度、通道数

# 维度调整
train_images = tf.reshape(train_images, (train_images.shape[0], train_images.shape[1], train_images.shape[2], 1))
print(train_images.shape)
test_images = tf.reshape(test_images, (test_images.shape[0], test_images.shape[1], test_images.shape[2], 1))
print(test_images.shape)

3. 模型搭建 

LeNet-5 模型输入得是二维图像,先经过两次卷积层,两次池化层,再经过全连接层,最后用 softmax 分类作为输出结果。

# 模型构建
net = tf.keras.models.Sequential([# 卷积层: 6 个 5*5 的卷积核,激活函数是 sigmoidtf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='same', activation='sigmoid', input_shape=(28, 28, 1)),# max poolingtf.keras.layers.MaxPool2D(pool_size=2, strides=2),# 卷积层: 16 5 * 5 sigmoidtf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), activation='sigmoid'),# max poolingtf.keras.layers.MaxPool2D(pool_size=2, strides=2),# 维度调整 将 feature map 拉成一个向量tf.keras.layers.Flatten(),# 全连接层 sigmoidtf.keras.layers.Dense(120, activation='sigmoid'),# 全连接层 sigmoidtf.keras.layers.Dense(84, activation='sigmoid'),# 输出层 softmaxtf.keras.layers.Dense(10, activation='softmax')
])

使用 net.summary() 查看网络结构

4. 模型编译

设置优化器和损失函数

# 优化器和损失函数
net.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.6), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=['accuracy'])

5. 模型训练

# 指明训练数据和验证集
net.fit(train_images, train_labels, epochs=10, batch_size=128, validation_split=0.1)

训练过程如下:

6. 模型评估

score = net.evaluate(test_images, test_labels, verbose=1)
print(f'Test accuracy: {score[1]}')

本文训练后的 LeNet-5 对手写数字数据集的测试精度达到了 97.8%,还是不错的。 


http://chatgpt.dhexx.cn/article/jTWM0rRp.shtml

相关文章

浅谈LeNet-5

浅谈LeNet-5 基于Tensorflow的实现欢迎查看我下一篇博客Tensorflow实战 LeNet-5神经网络进行手写体数字识别 一、LetNet是什么? LetNet是一种入门级的神经网络模型,是一个简单的卷积神经网络,可以用来做手写体识别。 下面我将以上图为例简…

卷积神经网络CNN与LeNet5详解(可训练参数量、计算量、连接数的计算+项目实战)

文章目录 神经网络CNN卷积神经网络CNN的由来局部感受野共享权重池化CNN的结构光栅化 LeNet5详解LeNet5-C1层LeNet5-S2层LeNet5-C3层LeNet5-S4层LeNet5-C5层LeNet5-F6层LeNet5-OUTPUT层计算公式 LeNet5实战定义网络模型初始化模型参数训练测试准确率预测结果 神经网络 神经网络可…

lenet5实现

Pytorch环境下搭建lenet5网络实现手写数字识别 (文章采用cuda9.0cudnn7.4pytorch1.6环境) 数据集选用EMNIST dataset中的手写数据集,参考链接如下: 数据集下载地址 代码部分参考S.E作者的pytorch实现手写英文字母识别&#xff0…

从零开始的神经网络构建历程(三,LeNet5复现)

前两篇博文主要介绍了torch如何构建全连接前馈神经网络,本篇博客主要针对经典卷积神经网络LeNet5进行复现。 卷积神经网络的基本结构 相信不少人都看过不少博客,也都对卷积神经网络的大致结构了解一点,这里本人站在神经元的角度来描述卷积神…

卷积神经网络LeNet5结构

LeNet5可以说是最早的卷积神经网络了,它发表于1998年,论文原文Gradient-Based Learning Applied to Doucment Recognition作者是Yann Le Cun等。下面对LeNet5网络架构进行简单的说明,有兴趣的同学可以去参考原文,论文原文地址http…

Lenet5(1998)

先读 https://blog.csdn.net/zhangjunhit/article/details/53536915 https://blog.csdn.net/qianqing13579/article/details/71076261 第三个卷积层,S2 6个1010的特征映射,C3是16个1010的特征映射,怎么做的呢? 关注C3层 Why not …

LeNet5的论文及理解

LeNet5网络的来源:Lcun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324. 1. 卷积神经网络(Convolutional Neural Network,CNN)基…

Pytorch搭建LeNet5网络

本讲目标:   介绍Pytorch搭建LeNet5网络的流程。 Pytorch八股法搭建LeNet5网络 1.LeNet5网络介绍2.Pytorch搭建LeNet5网络2.1搭建LeNet网络2.2测试LeNet网络输出2.3下载数据集2.4加载并配置网络2.5训练并保存网络2.6测试图片 1.LeNet5网络介绍 借鉴点:…

HLS:卷积神经网络LeNet5的实现与测试

目录 一、引言二、LeNet5的学习三、数学知识补充四、HLS代码设计五、仿真综合与优化六、Zynq平台搭建测试七、一些注意点八、文献时间线与后续工作 一、引言 1、开发环境。 Windows10、Vivado2018.2、Vivado HLS与Xilinx SDK。 2、LeNet5概述。 1994年,CNN网络&…

卷积神经网络(一):LeNet5的基本结构

在机器视觉,图像处理领域,卷积神经网络取得了巨大的成功。本文将参考UFLDL和DEEPLEARNING.NET的教程,结合自己的理解,梳理一下卷积神经网络的构成以及其BP算法的求解。虽然利用theano可以方便的实现LeNet5,但是不利于学…

LeNet5网络结构详解

文章目录 1.论文地址:2.LeNet5网络结构:3.首先了解参数量和计算量之间的区别和计算:(1)参数量(Params):(2)计算量(FLOPS):&#xff08…

经典网络模型介绍系列——LeNet-5

从今天开始,带大家从LeNet5开始学习经典的网络模型。 一、LeNet-5 LeNet-5是LeNet系列的最终稳定版,它被美国银行用于手写数字识别,该网络有以下特点: 所有卷积核大小均为5*5,步长为1;所有池化方法为平均…

LeNet5的深入解析

论文:Gradient-based-learning-applied-to-document-recognition 参考:http://blog.csdn.net/strint/article/details/44163869 LeNet5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,…

LeNet5模型讲解

加粗样式LeNet5模型讲解 LeNet5模型总览 总共8层网络,分别为: 输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、…

LeNet-5详解

一、前言 LeNet-5出自论文Gradient-Based Learning Applied to Document Recognition,是一种用于手写体字符识别的非常高效的卷积神经网络。 本文将从卷积神经网络结构的基础说起,详细地讲解每个网络层。 论文下载:请到文章结尾处下载。 …

卷积神经网络:LeNet-5

2021SCSDUSC LeNet-5卷积神经网络的整体框架: 特征映射:一幅图在经过卷积操作后得到结果称为特征图。 LeNet-5共有8层,包含输入层,每层都包含可训练参数;每个层有多个特征映射(,每个特征映射通过一种卷积…

LeNet-5网络详解

文章目录 1 模型介绍2 模型结构3 模型特性 1 模型介绍 LeNet-5出自论文《Gradient-Based Learning Applied to Document Recognition》,是由 L e C u n LeCun LeCun 于1998年提出的一种用于识别手写数字和机器印刷字符的卷积神经网络,其命名来源于作者 …

深度学习入门(一):LeNet-5教程与详解

1.什么是LeNet LeNet5诞生于1994年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从1988年开始,在多年的研究和许多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet5。 LeNet: 主要用来…

卷积神经网络(CNN)开山之作——LeNet-5。卷积神经网络基本介绍。

目录 一、LeNet-5的背景 二、传统分类算法在图像识别上的弊端 三、卷积神经网络的3个基本特征 四、LeNet-5的网络结构 1、Input layer 2、Conv1 3、Subsampling2 4、Conv3 5、Subsampling4 6、Conv5 7、FC6 8、Output7 五、LeNet-5总结 一、LeNet-5的背景 LeNet-5…

这可能是神经网络 LeNet-5 最详细的解释了!

大家好,我是红色石头! 说起深度学习目标检测算法,就不得不提 LeNet- 5 网络。LeNet-5由LeCun等人提出于1998年提出,是一种用于手写体字符识别的非常高效的卷积神经网络。出自论文《Gradient-Based Learning Applied to Document R…