亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Equipment >> 工业机器人

如何提高隐藏层神经网络的精度

在本文中,我们将进行一些分类实验并收集有关隐藏层维度与网络性能之间关系的数据。

在本文中,您将学习如何使用 Python 实现和示例问题修改隐藏层以提高神经网络的准确性。

但是,在我们进入该主题之前,请考虑了解本系列神经网络中的前几篇文章:

  1. 如何使用神经网络进行分类:什么是感知器?
  2. 如何使用简单的感知器神经网络示例对数据进行分类
  3. 如何训练基本的感知器神经网络
  4. 了解简单的神经网络训练
  5. 神经网络训练理论简介
  6. 了解神经网络中的学习率
  7. 使用多层感知器进行高级机器学习
  8. Sigmoid 激活函数:多层感知器神经网络中的激活
  9. 如何训练多层感知器神经网络
  10. 了解多层感知器的训练公式和反向传播
  11. Python 实现的神经网络架构
  12. 如何在 Python 中创建多层感知器神经网络
  13. 使用神经网络进行信号处理:神经网络设计中的验证
  14. 训练神经网络数据集:如何训练和验证 Python 神经网络
  15. 神经网络需要多少隐藏层和隐藏节点?
  16. 如何提高隐藏层神经网络的准确性

隐藏层中包含的节点数量影响感知器神经网络的分类能力和速度。我们将进行实验,这将帮助我们形成一些关于隐藏层维度如何适应尝试设计的网络的初步直觉,该网络在合理的时间内训练,产生具有可接受延迟的输出值,并满足准确性要求.

Python 中的基准测试

第 12 部分中介绍的神经网络 Python 代码已经包含一个部分,该部分通过使用经过训练的网络对验证数据集中的样本进行分类来计算准确度。因此,我们需要做的就是添加一些代码来报告训练(包括前馈操作和反向传播)和实际分类功能(仅包括前馈操作)的执行时间。我们将使用 time.perf_counter() 功能。

这是我标记训练开始和结束的方式:

验证开始和停止时间的生成方式相同:


两个处理时间测量报告如下:


训练数据和测量程序

神经网络将对由–20 到+20 之间的四个数值组成的输入样本进行真/假分类。

因此,我们有四个输入节点和一个输出节点,输入值是用如下所示的 Excel 方程生成的。


我的训练数据集包含 40,000 个样本,验证集包含 5000 个样本。学习率为 0.1,我只执行了一个训练时期。

我们将执行三个实验,代表具有不同复杂程度的输入-输出关系。 np.random.seed(1) 语句被注释掉,所以初始权重值会有所不同,因此分类精度也会有所不同。

在每个实验中,程序将针对每个隐藏层维度执行 5 次(使用相同的训练和验证数据),准确度和处理时间的最终测量值将是 5 次独立运行产生的结果的算术平均值.

实验 1:一个低复杂度的问题

在这个实验中,只有前三个输入大于零时,输​​出才为真,如下面的Excel截图所示(注意第四个输入对输出值没有影响)。

我认为这对于多层感知器来说是一个相当简单的输入-输出关系。

根据我在第 15 部分中提供的关于神经网络需要多少层和节点的建议,我将从等于输入维度三分之二的隐藏层维度开始。

由于我不能有一个包含一小部分节点的隐藏层,我将从 H_dim =2 开始 .下表显示了结果。


我们看到分类改进一直到五个隐藏节点。但是,我认为这些数字夸大了从四个节点增加到五个节点的好处,因为四个隐藏节点运行之一的准确率是 88.6%,这拖累了平均值。

如果我消除了那个低准确度的运行,四个隐藏节点的平均准确度实际上略高于五个隐藏节点的平均准确度。我怀疑在这种情况下,四个隐藏节点将提供准确性和速度的最佳平衡。

在这些结果中需要注意的另一件重要事情是隐藏层维度如何影响训练时间和处理时间的差异。从两个隐藏节点移动到四个隐藏节点,验证时间增加了 1.3 倍,但训练时间增加了 1.9 倍。

与前馈处理相比,训练的计算密集程度要高得多,因此我们需要特别注意网络配置如何影响我们在合理的时间内训练网络的能力。

实验 2:一个中等复杂度的问题

Excel 屏幕截图显示了此实验的输入输出关系。所有四个输入现在都影响输出值,并且比较不像实验 1 中那样直接。

我从三个隐藏节点开始。结果如下:

在这种情况下,我怀疑五个隐藏节点将为我们提供准确度和速度的最佳组合,尽管四隐藏节点运行再次产生一个准确度值,该值明显低于其他节点。如果忽略这个离群值,四个隐藏节点、五个隐藏节点和六个隐藏节点的结果看起来非常相似。

五个隐藏节点和六个隐藏节点的运行没有产生任何异常值这一事实使我们得出一个有趣的可能发现:也许增加隐藏层维数会使网络对由于某种原因导致训练特别困难。

实验 3:一个高度复杂的问题

如下所示,新的输入-输出关系再次包括所有四个输入值,我们通过对一个输入求平方并取另一个输入的平方根来引入非线性。


结果如下:


对于这种更复杂的数学关系,网络肯定会遇到更多困难;即使有七个隐藏节点,精度也低于我们在低复杂度问题中仅使用三个隐藏节点所达到的精度。我相信我们可以通过修改网络的其他方面来提高高复杂度的性能——例如,包括偏差(参见第 11 部分)或退火学习率(参见第 6 部分)。

尽管如此,我还是将隐藏层维数保持在 7 维,直到我完全确信其他增强功能可以让网络以较小的隐藏层保持足够的性能。

结论

我们已经看到了一些有趣的测量,它们描绘了隐藏层维度和感知器性能之间关系的相当清晰的图景。我们当然可以探索更多细节,但我认为这为您提供了一些可靠的基础信息,您可以在试验神经网络设计和训练时利用这些信息。


工业机器人

  1. 神经网络需要多少隐藏层和隐藏节点?
  2. 神经网络训练数据集:如何训练和验证 Python 神经网络
  3. 如何在 Python 中创建多层感知器神经网络
  4. Python 实现的神经网络架构
  5. 如何训练多层感知器神经网络
  6. 如何训练基本的感知器神经网络
  7. 如何使用简单的感知器神经网络示例对数据进行分类
  8. 网络生态系统如何改变农场的未来
  9. 保护从网络层到应用层的物联网
  10. Thomas WebTrax 与 Google Analytics、Thomas Network 等有何不同
  11. 0G 网络传感器如何保护疫苗冷链
  12. 如何选择合适的激光切割系统以最大限度地提高生产率和精度