我刚从这段视频中编码了神经网络
https://www.youtube.com/watch?v=KkwX7FkLfug
虽然不是真的需要,但源代码可在此处获得 http://inkdrop.net/dave/docs/neural-net-tutorial.cpp
我稍微改变了输入数据代码,所以现在我的程序测试点是否高于或低于一行。这个功能有效。它打印完全相同的输入/目标文件,但X和Y坐标的值介于0和20之间,如果此点位于Y = 2x + 4的线上方,则输出值计算为0或1。输入文件生成且准确。
我已经进行了一些测试,并发现了有趣的结果。使用2 4 1(2个输入神经元,4个隐藏,1个输出)拓扑和2000个输入值运行程序会产生9.164的初始误差... E61 传递1.在传递2000时,错误减少到-2.086 ... E53,仍然相当不准确...
现在,让我们将输入大小增加到10000.显然,这应该会提高程序的准确性,因为它有更多要学习的东西。它确实如此,错误现在减少到-5.602 ... E18,我可以看到它的输出值非常准确。
问题出在哪里。除非我错了,否则我认为网络中隐藏神经元的数量可以提高它的效率。我已将拓扑更改为2 50 1,并将输入大小保持为2000.但这会导致与之前相同的结果!为什么是这样?不能增加隐藏神经元的数量会减少相同输入大小的错误吗?
更新:我刚尝试通过使用2 4 4 4 4 4 1的地形来增加隐藏神经元的层数。这对数据没有影响
答案 0 :(得分:0)
通常在尝试构建神经模型时,从少量神经元开始。有一些例外,如Deepnets或Reservoir计算。 你可以增加神经元的数量,然而,提供太多的搜索空间扩大,你可能没有数据训练,或者网络变得比规则模型更多的内存,当然你需要更多的迭代来训练它。 我会看看改进网络的其他方法,看输入,网络类型,传输函数。
答案 1 :(得分:0)
增加层数或感知者数量不会(不应该)对输出产生直接影响,因为神经网络正在接受训练以响应某些刺激。采用最基本的神经网络:一个具有单个感知器,返回输入值(这是最大适应度)。很明显,无论采取何种措施,更多层或感知器都不会改善该网络的性能。
通常,添加图层以处理输入数据中的非线性(如果数据是线性的,则可能比处理数据的神经网络更容易解决)。如果你有足够数量的层来表示问题空间中的非线性,那么增加层数应该对输出几乎没有影响。
资料来源:刚刚完成了一个关于神经网络的学期项目并且遇到了同样的问题,如果你愿意的话,我可以添加一些特定的来源。