python - 了解神经网络在文档示例 (MNIST) 中的准确预测
问题描述
我参加了神经网络的快速课程以更好地理解它们,现在我正在 R 中亲自尝试它们。我正在关注Keras 的这个文档。
我理解正在发生的事情的方式:
我们正在输入一系列图像,并根据这些像素中像素和颜色的排列将这些图像转换为数值矩阵。然后,我们建立一个神经网络模型来学习这些排列的模式,具体取决于分类(0 到 9)。然后我们使用该模型来预测图像属于哪个类别。老实说,我承认我不完全确定 y_train 和 x_train 是什么。我只是将其视为一个训练集和一个验证集,所以我不确定 x 和 y 之间的区别是什么。
我的问题:
我已经按照 T 的步骤进行操作,模型运行良好,并且预测看起来与文档中的一样。最终,预测如下所示:
我认为这意味着 x_test 中的观察 1 被预测为类别 7。
如果我进一步向下滚动,每列和每行都有一个 0。这就是我感到困惑的地方。我也不确定如何查看原始图像以亲自查看它们对它们的预测程度。我最终想自己在油漆中画一个数字,然后看看模型是否可以预测它,但为此我需要先了解发生了什么。我觉得我很接近,但我只需要一点点推动!
解决方案
我认为,如果您阅读有关输入和输出层尺寸的更多信息,那将有所帮助。
在您的示例中: 输入层:图像的单个训练示例具有两个维度 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, , ]
希望这可以帮助!!
推荐阅读
- laravel - Vuetable-2 无法安装在 Laravel 6 中
- c# - Azure Database Horizontal Sharding 多租户 C# asp.net 应用程序的最佳解决方案
- c++ - 如何用一条线链接主窗口内的 2 个静态窗口?
- erlang - Actor Systems 如何防止队列中的内存溢出,同时防止线程阻塞写入队列?
- r - 将 svg 对象保存到磁盘上
- node.js - URL 重写不起作用 - Azure Web 应用程序(节点)上的 React SPA
- excel - 将单元格数据与不同的工作簿数据进行比较?
- xcode - 在 Preview 中基于 Observable 更新 SwiftUI View
- javascript - 列引导程序
- java - 我怎样才能在java中通过这个json?