手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

卷积神经网络(CNN)是当前用于图像分类任务的最先进的体系结构。无论是面部识别、自动驾驶汽车还是物体检测,CNN都被广泛使用。在这篇文章中,我们设计了一个简单的二维卷积神经网络(CNN)模型,该模型使用具有张量流后端的keras,用于众所周知的MNIST数字识别任务。整个工作流程可以是:

  • 准备数据

  • 建立和编译模型

  • 训练和评估模型

  • 将模型保存到磁盘以供重用

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

准备数据

这里使用的数据集是如上所述的MNIST数据集。 MNIST数据库(修改后的国家标准与技术研究院数据库)是手写数字(0至9)的大型数据库。该数据库包含60,000个训练图像和10,000个每个大小为28x28的测试图像。第一步是加载数据集,这可以通过keras api轻松完成。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

从这里可以看出,在左上角存储的图像'5'是X_train [0],y_train [0]包含标签’5'。我们的深度学习模式应该只能够手写图像并预测写入的实际数字。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

现在,为了准备数据,我们需要对图像进行一些处理,如调整图像大小,对像素值进行归一化等。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

在对图像信息进行必要的处理之后,标签数据即y_train和y_test需要被转换为分类格式,如标签'3'应该被转换为向量[ 0,0,0]用于建模。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

建立和编译模型

在数据准备好提供给模型后,我们需要定义模型的体系结构并使用必要的优化函数、损失函数和性能指标进行编译。

这里遵循的体系结构是2个卷积层,接着是合并层,分别是完全连接层和softmax层。在每个卷积层使用多个滤波器,用于不同类型的特征提取。一个直观的解释是,如果第一个过滤器有助于检测图像中的直线,第二个过滤器将有助于检测圆圈等等。每层技术执行的解释将成为即将发布的文章的一部分。在maxpooling和完全连接层之后,在我们的模型中引入dropout作为正则化来减少过度拟合问题。

在maxpooling和完全连接层之后,在我们的模型中引入dropout作为正则化来减少过度拟合问题。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

在定义了模型的体系结构之后,需要编译模型。在这里,我们使用categorical_crossentropy损失函数,因为它是一个多类分类问题。由于所有标签都具有相似的权重,因此我们更愿意将其作为性能指标。使用称为AdaDelta的流行梯度下降技术来优化模型参数。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

训练和评估模型

在定义和编译模型架构之后,需要使用训练数据对模型进行训练,以便能够识别手写数字。因此我们将用X_train和y_train来拟合模型。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

这里,一个时代意味着所有训练样本的前向和后向传递。批量大小意味着一次前进/后退过程中训练样本的数量。训练输出是:

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

现在,训练好的模型需要根据性能进行评估。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

测试准确性99%+意味着该模型对于预测训练良好。如果我们将整个训练日志形象化,那么随着更多数量的时期,模型在训练和测试数据上的损失和准确性趋于一致,从而使模型变得稳定。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

将模型保存到磁盘以供重用

现在,训练好的模型需要序列化。模型的体系结构或结构将存储在json文件中,权重将以hdf5文件格式存储。

手把手教你用一个简单的2DCNN完成MNIST数字识别任务!

因此,保存的模型可以稍后重复使用或轻松移植到其他环境。在即将发布的文章中,我们将看到如何在生产环境中部署这种训练好的模型。

享受深度学习!


分享到:


相關文章: