图像识别是计算机视觉最常用的任务之一,几乎所有的有关图像识别的教程都会将MNIST数据集作为入门数据集,因为MNIST数据集是图像识别问题中难度最小、特征差异较为明显的数据集,非常适合作为图像识别入门者的学习案例。本案例使用MNIST数据集,基于LeNet-5网络实现手写数字的识别任务。
本节中的所有代码在Ubuntu 20.04+Python 3.8.10+TensorFlow 2.9.1+Keras 2.9.0环境中实测通过,具体代码详见LeNet_MNIST.py文件,读者可以直接使用。
6.3.1 MNIST数据集简介
MNIST的全称是Modified National Institute of Standards and Technology,其中美国国家标准与技术研究所(NIST)是美国商务部下属的一个研究机构,MNIST数据集是这个机构通过收集不同人的手写数字进行整理得到的。
MNIST数据集由训练集(Training Set)和测试集(Test Set)两部分构成,其中训练集有60 000幅手写数字图片和标签,由250个不同的人手写的数字构成,测试集有10 000幅手写数字图片和标签。这些手写数字图片的内容为0~9这10个数字,都是28×28像素大小的灰度图,灰度图中每个像素都是一个0~255的灰度值。
MNIST数据集自1998年起,被广泛地应用于机器学习和深度学习领域,用来测试算法的效果,如果一个图像识别算法在MNIST数据集上效果差,那么在其他数据集上的表现效果也不会很好。
MNIST数据集可以通过MNIST官网下载。当然,目前许多深度学习框架已经内置了MNIST数据集,并且有相关的函数直接读取并划分数据集。如图6.29所示为MNIST数据集中部分手写数字的可视化图像展示。

图6.29 MNIST数据集中部分手写数字的可视化图像能展示
本案例使用LeNet-5网络实现对上述MNIST数据集图片中数字0~9的识别。
6.3.2 加载和预处理数据
1. 数据加载
MNIST数据集已经被集成在TensorFlow Keras框架中,可以使用Keras模块的mnist.load_data()函数直接加载,由于MNIST数据集由TensorFlow提前规划好,该函数会分别返回训练集数据和标签(train_images,train_labels)、测试集数据和标签(test_images,test_labels)。
其中,train_images是一个60 000×28×28的三维矩阵,第一维60 000代表样本量,其余两维为图片长×宽的像素矩阵,因为只是灰度图,所以没有通道数。
其中,train_labels是一个大小为60 000的一维数组,分别表示这60 000幅图片是数字0~9中的

文章介绍了如何利用MNIST数据集和LeNet-5神经网络模型进行图像识别,特别是手写数字的识别任务。首先,讲述了MNIST数据集的来源和结构,然后详细说明了数据加载和预处理的步骤,包括图像的维度调整和One-Hot编码。接着,文章详细阐述了LeNet-5的网络结构,包括卷积层、池化层和全连接层的设计,并展示了如何用TensorFlow和Keras构建模型。最后,讨论了模型的编译、训练过程,以及如何监控训练性能。
最低0.47元/天 解锁文章
301





