首页 > 解决方案 > 了解神经网络在文档示例 (MNIST) 中的准确预测

问题描述

我参加了神经网络的快速课程以更好地理解它们,现在我正在 R 中亲自尝试它们。我正在关注Keras 的这个文档。

我理解正在发生的事情的方式:

我们正在输入一系列图像,并根据这些像素中像素和颜色的排列将这些图像转换为数值矩阵。然后,我们建立一个神经网络模型来学习这些排列的模式,具体取决于分类(0 到 9)。然后我们使用该模型来预测图像属于哪个类别。老实说,我承认我不完全确定 y_train 和 x_train 是什么。我只是将其视为一个训练集和一个验证集,所以我不确定 x 和 y 之间的区别是什么。

我的问题:

我已经按照 T 的步骤进行操作,模型运行良好,并且预测看起来与文档中的一样。最终,预测如下所示:在此处输入图像描述

我认为这意味着 x_test 中的观察 1 被预测为类别 7。

但是,查看 x_test 它看起来像这样:在此处输入图像描述

如果我进一步向下滚动,每列和每行都有一个 0。这就是我感到困惑的地方。我也不确定如何查看原始图像以亲自查看它们对它们的预测程度。我最终想自己在油漆中画一个数字,然后看看模型是否可以预测它,但为此我需要先了解发生了什么。我觉得我很接近,但我只需要一点点推动!

标签: pythonrmachine-learningdeep-learningneural-network

解决方案


我认为,如果您阅读有关输入和输出层尺寸的更多信息,那将有所帮助。

在您的示例中: 输入层:图像的单个训练示例具有两个维度 28*28,然后将其转换为维度 784 的单个向量。这充当神经网络的输入层。因此,对于m训练示例,您的输入层将具有维度(m, 784)。类比地说(对于传统的 ML 系统),您可以想象图像的每个像素都被转换为一个特征(或 x1、x2、... x784),而您的训练集是一个具有m行和784列的数据帧,然后输入神经网络进行计算y_hat = f(x1,x2,x3,...x784)

输出层:作为我们神经网络的输出,我们希望它预测它来自哪个数字0 to 9。因此,对于单个训练示例,输出层的维度为 10,表示从 0 到 9 的每个数字,对于n测试示例,输出层将是维度为 的矩阵n*10。我们y是一个长度向量,n类似于[1,7,8,2,.....]包含每个测试示例的真实值。但是为了匹配输出层的维度,y向量的维度是使用 one-hot 编码转换的。想象一个长度为 10 的向量,通过将 1 放在第 7 位表示数字 7,其余位置为零,类似于[0,0,0,0,0,0,1,0,0,0]

因此,在您的问题中,如果您希望看到原始图像,您应该能够在使用类似的东西重塑训练示例之前看到它image(mnist$test$x[1, , ]

希望这可以帮助!!


推荐阅读