多层感知器:减少误差
Multi-layer perceptron: error reduction
我正在研究多层感知器并为 2D-space 中的分类点编写简单的网络。 Net 通过具有动量的反向传播算法进行训练。
不幸的是,即使局部误差趋于零,全局误差仍然很高,我不明白为什么。控制台中全局错误的输出范围在 [100, 150] 中。所以,我的主要问题是:我怎样才能减少这个错误?
显然,我提供 link 来与我的项目一起存档。关于这一点的几句话:net 的几乎所有参数都在文件 libraries.h 中(输入、隐藏和输出层维度、学习率、动量率、sigma 和 sigma 导数定义)所以如果你想玩那个 - 在这里你去。网络结构在文件 perceptron.cpp 中,图形库在 plot.cpp 中。要测试项目,您应该 运行 它,在 window 您希望成为 类 中心的点上单击鼠标左键。右键单击 window 将在围绕这些中心的半径为 5 的圆中生成随机点,并将用这些点训练网络。
如果有人能提供一些理论上的解决方案,甚至重新审视我的代码,我将不胜感激。
我成功解决了问题。
首先,我的点组中心不正确,所以这些点在 2D 中变得完全不可分割 space。
其次,我不得不将训练过程重写为从集合中选取随机点。
第三,我发现将 double 转换为 int 并不是最好的主意(数据丢失率很高)。
Link 到最终版本代码:CLICK
我正在研究多层感知器并为 2D-space 中的分类点编写简单的网络。 Net 通过具有动量的反向传播算法进行训练。
不幸的是,即使局部误差趋于零,全局误差仍然很高,我不明白为什么。控制台中全局错误的输出范围在 [100, 150] 中。所以,我的主要问题是:我怎样才能减少这个错误?
显然,我提供 link 来与我的项目一起存档。关于这一点的几句话:net 的几乎所有参数都在文件 libraries.h 中(输入、隐藏和输出层维度、学习率、动量率、sigma 和 sigma 导数定义)所以如果你想玩那个 - 在这里你去。网络结构在文件 perceptron.cpp 中,图形库在 plot.cpp 中。要测试项目,您应该 运行 它,在 window 您希望成为 类 中心的点上单击鼠标左键。右键单击 window 将在围绕这些中心的半径为 5 的圆中生成随机点,并将用这些点训练网络。
如果有人能提供一些理论上的解决方案,甚至重新审视我的代码,我将不胜感激。
我成功解决了问题。
首先,我的点组中心不正确,所以这些点在 2D 中变得完全不可分割 space。
其次,我不得不将训练过程重写为从集合中选取随机点。
第三,我发现将 double 转换为 int 并不是最好的主意(数据丢失率很高)。
Link 到最终版本代码:CLICK