神经网络的输出每次都保持相同的值

时间:2015-06-20 15:02:58

标签: c++ artificial-intelligence

我正在研究一个非常简单的前馈神经网络来练习我的编程技巧。共有3个班级:

  • Neural :: Net;建立网络,提供输入值(目前没有反向传播)
  • Neural :: Neuron;具有神经元的特征(指数,输出,重量等)
  • Neural :: Connection;类似结构的类,随机化权重并保持输出,增量权重等。

该程序非常基础:我使用2个隐藏层和随机权重构建网络,然后要求它提供相同的输入值。

我的问题是:预计每次运行后程序会以不同的输出值结束,但输出总是相同的。我尝试在任何地方放置标记,以了解为什么它一遍又一遍地计算相同的东西,但我不能把我的手指放在错误上。

以下是代码:

>>> d = {"Pattern1":{"line1":"Services","line2":"0001","line3":{"include":"BFE"},
    "line4":{"Include":"1*1"},"line5":"0","line7":{"Include":"2*2"},"line8":
    {"services":["stop","pause","delete","startup"]}}, "Pattern2":
    {"line1":"Registry"}, "Pattern3":{"line1":"Files"} }
>>> pprint.pprint(d)
{'Pattern1': {'line1': 'Services',
              'line2': '0001',
              'line3': {'include': 'BFE'},
              'line4': {'Include': '1*1'},
              'line5': '0',
              'line7': {'Include': '2*2'},
              'line8': {'services': ['stop', 'pause', 'delete', 'startup']}},
 'Pattern2': {'line1': 'Registry'},
 'Pattern3': {'line1': 'Files'}}

编辑:我认为输入层中的偏置神经元被正确设置为输出1,而隐藏层中的偏置神经元被设置为0并且我修复了它。但每次运行的输出仍然相同。我在一张纸上做了数学计算,然后就可以了。这是输出(为了清晰起见,颜色编码):

Console log

我预计这些值就像权重一样是随机的。不应该是这样吗?我很迷惑。

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误。我以为rand()会自动初始化它的种子。我知道这是一件蠢事。我在程序开头添加了srand(time(NULL));,现在它可以正常工作。