Javascript 如何计算神经网络的输出?

Javascript 如何计算神经网络的输出?,javascript,machine-learning,ecmascript-6,neural-network,genetic-programming,Javascript,Machine Learning,Ecmascript 6,Neural Network,Genetic Programming,我大约一周前才开始学习人工神经网络,没有经过任何经典训练。仅仅通过观看视频和阅读博客/白皮书,我就走到了这一步 我对人工神经网络的最终输出有一个问题 比如说,我在构建一个XOR,其中有两个输入节点,三个节点在一个隐藏层,一个节点在输出层。一个2x3x1 首先,我想确定我的第一部分是正确的 因此,对于隐藏层中的每个节点,每个节点都有一个与其关联的权重。如果在隐藏层中有5个节点,则输入节点将计算其输入,并将其乘以与隐藏层中每个节点关联的权重 因此,为了计算第一个节点的sigmoid,您将获取所有输入

我大约一周前才开始学习人工神经网络,没有经过任何经典训练。仅仅通过观看视频和阅读博客/白皮书,我就走到了这一步

我对人工神经网络的最终输出有一个问题

比如说,我在构建一个XOR,其中有两个输入节点,三个节点在一个隐藏层,一个节点在输出层。一个2x3x1

首先,我想确定我的第一部分是正确的

因此,对于隐藏层中的每个节点,每个节点都有一个与其关联的权重。如果在隐藏层中有5个节点,则输入节点将计算其输入,并将其乘以与隐藏层中每个节点关联的权重

因此,为了计算第一个节点的sigmoid,您将获取所有输入,并将其乘以权重(对于偏差为no+),然后将sigmoid函数应用于输入*权重之和。然后我们用一个sigmoid压缩这个值,得到0.5866175789173301

基本上,它是,(1x.25)+(1x.10)=.35

现在,我只需要对每个节点执行三次 得到3个压扁的数字

  // (input1 * HiddenNode(x)Weight) + (input2 * HiddenNode(x)Weight)
  activationFunction((1 * .25) + (1 * .10)) // 0.5866175789173301
  activationFunction((0 * .40) + (1 * .60)) // 0.6456563062257954
  activationFunction((1 * .20) + (0 * .80)) // 0.549833997312478
现在,根据我的理解,我再次总结并挤压这些答案:

  activationFunction(hidden1 + hidden2 + hidden3) // 0.8559569515861635
到目前为止我的答案正确吗

我的问题是,如果你用两个比例数字来预测分数,89和6.5=(分数/睡眠时间)

如何计算从.8559到93这样的数字的输出,并计算该值的误差?除了偏见,我还遗漏了什么吗

如果我输入了最近3次股价变动的百分比,我想让它猜第四个价格,我将如何转换这样的答案:

 activationFunction(hidden1 + hidden2 + hidden3) // 0.8559569515861635
答案是0.10(股价变动百分比)还是其他真实世界的答案


提前谢谢

与前面提到的人不同。输入不应该是二进制的。它们应该在一定范围内(
0,1
用于乙状结肠,
-1,1
用于TanH)

在第一部分,如果你不考虑偏见,你是完全正确的

// Completely right, each hidden node gets input from 2 input nodes
activationFunction((1 * .25) + (1 * .10)) // 0.5866175789173301
activationFunction((0 * .40) + (1 * .60)) // 0.6456563062257954
activationFunction((1 * .20) + (0 * .80)) // 0.549833997312478

// However, all the hidden nodes are connected the output node
output = activationFunction((0.59 * weight1) + (0.64 * weight2) + (0.55 * weight3))
请始终记住,节点只能通过始终具有权重的连接连接到其他节点

我的问题是,如果你用两个比例数字来预测分数,89和6.5=(分数/睡眠时间)

首先缩放输入(阅读更多):


因此,如果您得到的新分数是100,并且您的输出是
0.8559
,那么输出节点上的错误是
1.00-0.8559=0.1441
。然后通过网络反向传播,但我不是正确的解释者。

输入必须是二进制的,所以10011011输出10111011。正如您所说,每个节点要么被触发,要么不被触发。因此,输入节点要么被触发,要么不是1/0。神经元网络的一大特点是它们可以被训练。所以我认为你应该转向OOP,来处理许多节点…我把神经网络包装在一个类中,我实例化了100个节点,用适应度函数对每个基因组进行填充和评分。我提到的节点是在什么时候触发的。我认为使用sigmoid时没有阈值,因为sigmoid充当阈值。我已经做了一些测试,一些基因组可以得分为.99991234,权重调整为.00001234。很酷!我只是想在我满怀希望之前确保我做的事情是正确的。我需要弄清楚如何将我的输入编码为二进制。据我所知,节点要么是1要么是0,所以触发或不触发。它们有一个触发值,如果计算值大于触发值,则值为1,否则0我认为你是对的。对于感知器,输出必须达到一个阈值,它要么吐出0,要么吐出1。通常,对于ANN,比例为-1到1或0到1。从概念上讲,两者之间都有无限数量的数字。这只是第一个更好的缩放,你可以看到更多,就像一个宽屏电视。
89 > 0.89
6.5 > 6.4 / 24 = 0.27