0

我正在研究多层感知器并为二维空间中的分类点编写简单的网络。通过具有动量的反向传播算法进行网络训练。不幸的是,即使局部误差变为零,全局误差仍然很高,我不明白为什么。控制台中全局错误的输出范围在 [100, 150]。所以,我的主要问题是:我怎样才能减少这个错误?
显然,我提供了与我的项目一起存档的链接。关于这一点的几句话:net 的几乎所有参数都在文件 library.h 中(输入、隐藏和输出层尺寸、学习率、动量率、sigma 和 sigma 导数定义)所以如果你想玩这个 - 就在这里. net 的结构在文件 perceptron.cpp 中,图形库在 plot.cpp 中。要测试项目,您应该运行它,在出现的窗口上您希望成为课程中心的点上单击鼠标左键。右键单击窗口将在这些中心周围的半径为 5 的圆中生成随机点,并将使用这些点训练网络。
如果有人可以提供一些理论解决方案,甚至重新审视我的代码,我将非常感激。

代码

4

1 回答 1

0

我成功解决了这个问题。
首先,我的点组中心不正确,因此这些点在 2D 空间中变得完全不可分割。
其次,我不得不将训练过程重写为从集合中选择随机点。
第三个,我发现将 double 转换为 int 并不是最好的主意(数据丢失率很高)。
链接到最终版本的代码:CLICK

于 2015-05-10T09:15:01.670 回答