1. 首页
  2. 机器学习

开发用于钞票认证的神经网络

为新数据集开发神经网络预测模型可能具有挑战性。

一种方法是首先检查数据集并为可能使用的模型开发思路,然后探索数据集上简单模型的学习动态,然后最后使用健壮的测试工具为数据集开发和调整模型。

此过程可用于为分类和回归预测建模问题开发有效的神经网络模型。

在本教程中,您将发现如何为钞票二进制分类数据集开发多层感知器神经网络模型。

完成本教程后,您将知道:

  • 如何加载和汇总钞票数据集以及如何使用结果来建议要使用的数据准备和模型配置。
  • 如何探索数据集上简单MLP模型的学习动态。
  • 如何开发出对模型性能的可靠估计,调整模型性能以及对新数据进行预测。

让我们开始吧。

本教程分为4个部分。他们是:

  1. 钞票分类数据集
  2. 神经网络学习动力学
  3. 稳健的模型评估
  4. 最终模型和做出预测

钞票分类数据集

第一步是定义和探索数据集。

我们将使用“钞票”标准二进制分类数据集。

钞票数据集涉及在给定从照片中采取的多种措施的情况下预测给定钞票是否真实。

数据集包含1,372行和5个数字变量。这是具有两个类别的分类问题(二进制分类)。

下面提供了数据集中的五个变量的列表。

  • 小波变换图像的方差(连续)。
  • 小波变换图像的偏斜度(连续)。
  • 小波变换图像的峰度(连续)。
  • 图像的熵(连续)。
  • 类(整数)。

以下是数据集的前5行的示例

我们可以直接从URL将数据集作为pandas DataFrame加载;例如:

运行示例将直接从URL加载数据集并报告数据集的形状。

在这种情况下,我们可以确认该数据集具有5个变量(4个输入和一个输出),并且该数据集具有1,372行数据。

对于神经网络来说,这不是很多数据行,因此建议使用一个可能带有正则化的小型网络是合适的。

这也表明,使用k折交叉验证是一个好主意,因为与火车/测试拆分相比,它可以提供更可靠的模型性能估算,并且因为单个模型的拟合时间为数秒而不是数小时或数天。最大的数据集。

接下来,我们可以通过查看摘要统计信息和数据图来了解有关数据集的更多信息。

运行示例之前,先加载数据,然后输出每个变量的摘要统计信息。

我们可以看到,值随均值和标准偏差的不同而变化,在建模之前可能需要进行一些归一化或标准化。

然后为每个变量创建一个直方图。

我们可以看到,前两个变量可能具有类似高斯的分布,而后两个输入变量可能具有偏高斯分布或指数分布。

我们可以在每个变量上使用幂变换来降低概率分布的偏斜,这可能会改善模型性能,这可能会带来一些好处。

钞票分类数据集的直方图

钞票分类数据集的直方图

现在我们熟悉了数据集,让我们探讨如何开发神经网络模型。

神经网络学习动力学

我们将使用TensorFlow为数据集开发一个多层感知器(MLP)模型。

我们不知道学习超参数的哪种模型架构对该数据集将是好的还是最好的,所以我们必须进行实验并发现什么是行之有效的。

考虑到数据集很小,小批量大小可能是个好主意,例如16或32行。入门时,使用Adam版本的随机梯度下降法是个好主意,因为它会自动适应学习率,并且在大多数数据集上都能很好地工作。

在我们认真评估模型之前,最好回顾一下学习动态并调整模型体系结构和学习配置,直到我们拥有稳定的学习动态,然后再充分利用模型。

我们可以通过使用简单的训练/测试数据拆分并查看学习曲线图来做到这一点。这将帮助我们了解我们是学习过度还是学习不足;然后我们可以相应地调整配置。

首先,我们必须确保所有输入变量都是浮点值,并将目标标签编码为整数值0和1。

接下来,我们可以将数据集分为输入和输出变量,然后分为67/33训练和测试集。

我们可以定义一个最小的MLP模型。在这种情况下,我们将使用一个包含10个节点的隐藏层和一个输出层(任意选择)。我们将在隐藏层中使用ReLU激活功能以及“ he_normal ”权重初始化,因为它们在一起是一种很好的做法。

该模型的输出是用于二进制分类的S型激活,我们将使二进制交叉熵损失最小化。

由于这是一个很小的数据集,因此我们将其拟合为50个训练时期(任意选择)的模型,批处理大小为32。

我们正在原始数据上拟合模型,我们认为这可能是个好主意,但这是一个重要的起点。

训练结束时,我们将评估模型在测试数据集上的性能,并将性能报告为分类准确性。

最后,我们将在训练过程中在火车和测试集上绘制交叉熵损失的学习曲线。

综上所述,下面列出了评估我们在钞票数据集上的第一个MLP的完整示例。

运行示例首先使模型适合训练数据集,然后报告测试数据集的分类准确性。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到该模型达到了100%的高或完美精度。这可能表明预测问题很容易和/或神经网络非常适合该问题。

然后创建列车和测试装置上的损耗线图。

我们可以看到模型似乎收敛良好,并且没有显示出过度拟合或拟合不足的迹象。

钞票数据集上简单多层感知器的学习曲线

钞票数据集上简单多层感知器的学习曲线

第一次尝试时,我们表现出色。

现在,我们对数据集上的简单MLP模型的学习动力学有了一些了解,我们可以着眼于对数据集上的模型性能进行更健壮的评估。

稳健的模型评估

k折交叉验证过程可以提供更可靠的MLP性能估计,尽管它可能非常慢。

这是因为必须拟合和评估k个模型。当数据集大小较小时(例如钞票数据集),这不是问题。

我们可以使用StratifiedKFold类并手动枚举每个折叠,对模型进行拟合,评估,然后在过程结束时报告评估得分的平均值。

我们可以使用此框架通过我们的基本配置,甚至使用各种不同的数据准备,模型架构和学习配置,来开发对MLP模型性能的可靠估计。

重要的是,在使用k-fold交叉验证来评估性能之前,我们首先需要对上一部分中的数据集模型的学习动态有一个了解。如果我们开始直接调整模型,则可能会得到良好的结果,但是如果没有,我们可能不知道为什么,例如,模型过拟合或拟合不足。

如果我们再次对模型进行较大更改,则最好返回并确认模型在适当收敛。

下面列出了用于评估上一节中的基本MLP模型的此框架的完整示例。

运行示例将在评估过程的每次迭代中报告模型性能,并在运行结束时报告分类精度的平均值和标准偏差。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MLP模型的平均准确度约为99.9%。

这证实了我们的期望,即基本模型配置对此数据集非常有效,并且确实该模型非常适合该问题,也许该问题很难解决。

(对我而言)这是令人惊讶的,因为我原本希望进行一些数据缩放,也许还需要进行一次电源转换。

接下来,让我们看一下如何拟合最终模型并使用它进行预测。

最终模型和做出预测

选择模型配置后,我们可以在所有可用数据上训练最终模型,并使用它对新数据进行预测。

在这种情况下,我们将使用具有辍学和小批量的模型作为最终模型。

尽管可以在整个数据集而不是数据集的训练子集上,但我们仍可以像以前一样准备数据并拟合模型。

然后,我们可以使用此模型对新数据进行预测。

首先,我们可以定义一行新数据。

注意:我从数据集的第一行中提取了这一行,期望的标签为’0’。

然后我们可以做出预测。

然后对预测进行转换,这样我们就可以在正确的标签中使用或解释结果(对于该数据集而言,这只是一个整数)。

在这种情况下,我们将仅报告预测。

综上所述,下面列出了为纸币数据集拟合最终模型并使用其对新数据进行预测的完整示例。

运行示例可以使模型适合整个数据集,并为单行新数据做出预测。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到模型预测输入行的标签为“ 0”。

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code