CNN 中的 MNIST 数据集17 Mar 2025 | 5 分钟阅读 MNIST (修改后的美国国家标准与技术研究院) 数据库是一个大型的手写数字数据库,用于训练各种图像处理系统。该数据集也被广泛用于机器学习领域的训练和测试。MNIST 数据库中的图像集是 NIST 两个数据库的组合:Special Database 1 和 Special Database 3。 MNIST 数据集有 60,000 张训练图像和 10,000 张测试图像。 MNIST 数据集可以在线获取,它本质上是一个包含各种手写数字的数据库。MNIST 数据集拥有大量数据,常用于展示深度神经网络的真正威力。我们的大脑和眼睛协同工作来识别任何数字图像。我们的头脑是一个强大的工具,它能够快速地对任何图像进行分类。一个数字有如此多的形状,我们的头脑可以很容易地识别这些形状并确定它是什么数字,但对于计算机来说,完成相同的任务并不简单。只有一种方法可以做到这一点,那就是使用深度神经网络,它允许我们训练计算机有效地对这些手写数字进行分类。 ![]() 因此,我们只处理了包含笛卡尔坐标系中简单数据点的数据。从现在开始,我们已经使用了二元类数据集。当我们使用多类数据集时,我们将使用Softmax 激活函数,它对于对二元数据集进行分类非常有用。并且它在排列 0 和 1 之间的值方面非常有效。Sigmoid 函数对于多因果数据集无效,为此,我们使用 softmax 激活函数,它能够处理它。 MNIST 数据集是一个多级数据集,包含 10 个类别,我们可以在其中对从 0 到 9 的数字进行分类。我们之前使用过的数据集和 MNIST 数据集之间的主要区别在于 MNIST 数据在神经网络中的输入方式。 在感知模型和线性回归模型中,每个数据点都由一个简单的 x 和 y 坐标定义。这意味着输入层需要两个节点来输入单个数据点。 在 MNIST 数据集中,单个数据点以图像的形式出现。MNIST 数据集中包含的这些图像通常为 28*28 像素,例如,水平轴上有 28 个像素,垂直轴上有 28 个像素。这意味着来自 MNIST 数据库的单个图像总共有 784 个像素需要分析。我们的神经网络的输入层有 784 个节点来解释这些图像之一。 ![]() 在这里,我们将看到如何创建一个函数,该函数是一个通过查看图像中的每个像素来识别手写数字的模型。然后使用 TensorFlow 训练该模型,通过使其查看数千个已经标记的示例来预测图像。然后,我们将使用测试数据集检查模型的准确性。 TensorFlow 中的 MNIST 数据集,包含手写数字的信息,分为三个部分
现在在开始之前,请务必注意,每个数据点都有两部分:一个图像 (x) 和一个描述实际图像的对应标签 (y),并且每个图像都是一个 28x28 的数组,即 784 个数字。图像的标签是 0 到 9 之间的一个数字,对应于 TensorFlow MNIST 图像。要下载和使用 MNIST 数据集,请使用以下命令 ![]() TensorFlow 中的 Softmax 回归TensorFlow MNIST 只有十种可能性,从 0 到 9。我们的目标是查看一张图像,并以特定的概率说明给定的图像是特定的数字。当存在可能性时,使用 Softmax,因为回归为我们提供了 0 到 1 之间的值,总和为 1。因此,我们的方法应该很简单。 ![]() ![]() 我们将一个 TensorFlow MNIST 图像分类到特定的类别中,然后将其表示为正确的或不正确的概率。现在,这完全取决于特定类别中的所有对象,我们可以对像素强度进行加权求和。我们还需要添加一个偏置,以确保某些事物更可能独立于输入。Softmax 对权重进行归一化,并对它们进行假设,假设具有负或零权重。 TensorFlow 中 MNIST 数据集的实现使用 TensorFlow MNIST 数据集分类的好处在于,它使我们能够描述一个交互操作的图,该图完全在 Python 之外运行。 首先,我们使用以下方法导入 TensorFlow 库 然后我们创建一个占位符,一个我们要求库使用以下方法运行计算时输入的数值 然后我们应该向我们的模型添加权重和偏置。使用 Variable,这是一个可修改的张量,在交互操作的图中具有作用域。 请注意,W 的形状为 [784, 10],因为我们希望通过将其乘以 784 维图像向量来为不同的类别生成 10 维的证据向量。我们可以将 b 添加到输出中,因为它具有 [10] 的形状。 TensorFlow MNIST - 训练我们通过将特征矩阵与权重相乘并添加偏置,然后将其运行到 softmax 函数来定义一个模型。 我们使用成本函数或均方误差函数来查找我们的结果与实际数据的偏差。错误越少,模型越好。另一个非常常见的函数是交叉熵,它衡量我们的预测效率有多低。该函数如下所述,其中 y 表示预测,y' 是实际分布。我们通过添加一个占位符来实现它。 然后定义交叉熵 现在我们已经成功地定义了我们的模型,是时候对其进行训练了。我们可以在梯度下降和反向传播的帮助下做到这一点。还有许多其他优化算法可用,例如逻辑回归、动态松弛等等。我们可以使用梯度下降,学习率为 0.5,用于成本函数优化。 在训练之前,我们需要启动一个会话并初始化我们之前创建的 Variable。 这会启动一个交互式会话,并使用以下方法初始化变量 现在,我们必须训练网络。我们应该更改 epoch 的数量以适应我们的模型。 使用测试数据集检查准确性我们通过将我们的结果与测试数据集进行比较来检查准确性。在这里,我们可以使用 tf.argmax 函数,该函数可以让我们知道张量中沿特定轴的最大值的索引。 这给了我们布尔值的列表,然后我们在转换为浮点数后取平均值。 然后,我们可以通过以下方式打印出准确性 |
我们请求您订阅我们的新闻通讯以获取最新更新。