我最近开始实现一个前馈神经网络,我使用反向传播作为学习方法。我一直在使用en/backprop.html作为向导。
然而,在经历了第一个时代之后,我的错误是0。在将网络用于实际目的之前,我尝试了简单的网络结构:
每个训练阶段运行测试输入(1,1,0,0),计算输出误差(sigmoid导数* (1.0 - sigmoid)),反向传播误差并最终调整权重。
每个神经元的新重量=权重+ learning_rate *神经元的误差*输入的权重。
每个隐神经元的误差=(所有输出神经元的误差*连接权之和)*神经元的乙状结肠导数。
问题是,我的学习速度必须是0.0001,我才能看到不同时代之间在降低错误方面的任何“进步”。在本例中,错误开始于~30.0左右。任何更高的学习率和错误都会在第一次通过后导致0,从而导致误报。
同样,当我用我的真实数据(一组来自样本的32个音频特性--每个隐藏层有32个神经元)--来尝试这个网络时,我得到同样的问题。到任何噪声都会触发假阳性的地步。这可能是一个输入特性问题,但当我使用高音音符进行测试时,我可以清楚地看到原始数据与低音调数据的不同。
我是个神经网络新手,所以我几乎肯定我的网络有问题。任何帮助都将不胜感激。
发布于 2014-07-22 05:12:07
尽管声明您使用的是标准的前馈/反向支持的NN方法,但您还没有描述如何实际实现这一方法。你提到你使用“星系”链接作为指南,但我注意到,在“星系”页面上,没有提到对节点的偏差。也许你还没有包括这个重要的组成部分?关于Nate应用于NN节点的偏差的作用有一个很好的讨论,参见Role of Bias in Neural Networks。
接下来,与其使用两个隐藏层,不如只使用一个隐藏层。您可能需要增加该层中的节点数量,但是对于大多数实际问题,您应该能够通过一个隐藏层获得一个很好的解决方案。它将很可能是更稳定的,并肯定会使你更容易跟踪什么是正在发生的背后支柱。
发布于 2018-04-30 06:59:52
对我来说0.0001听起来是合理的。您可能会摆动其他常量,或者用不同的随机集为初始神经网络权重注入种子。
如果你的训练数据是正常的,那么在你得到正确的神经网络之前,做上千个或更多的刺激是完全正常的。
有许多技术,以获得更快的最终结果。例如,作为激活函数,您可以使用TanH或Relu,您也可以在x个周期内从0.001减少到0.0001,或者根据错误率降低。
https://stackoverflow.com/questions/23010207
复制相似问题