Algorithm 反向传播神经网络的多输入

Algorithm 反向传播神经网络的多输入,algorithm,neural-network,backpropagation,Algorithm,Neural Network,Backpropagation,我已经做了一个星期了。在我的编码中没有错误,我只需要正确的算法和概念。我已经实现了一个由1个隐藏层组成的神经网络。我使用反向传播算法来校正权重 我的问题是网络只能学习一种模式。如果我用相同的训练数据一遍又一遍地训练它,当给定的输入在数值上接近训练数据时,它会产生期望的输出 培训输入:1、2、3 培训输出:0.6,0.25 三百年后 输入:1、2、3 产量:0.6,0.25 输入1,1,2 产量:0.5853,0.213245 但是如果我使用多个不同的训练集,它只能学习最后一种模式。神经网络不是应

我已经做了一个星期了。在我的编码中没有错误,我只需要正确的算法和概念。我已经实现了一个由1个隐藏层组成的神经网络。我使用反向传播算法来校正权重

我的问题是网络只能学习一种模式。如果我用相同的训练数据一遍又一遍地训练它,当给定的输入在数值上接近训练数据时,它会产生期望的输出

培训输入:1、2、3 培训输出:0.6,0.25

三百年后

输入:1、2、3 产量:0.6,0.25

输入1,1,2 产量:0.5853,0.213245

但是如果我使用多个不同的训练集,它只能学习最后一种模式。神经网络不是应该学习多种模式吗?这是初学者常见的错误吗?如果是,请为我指出正确的方向。我看过很多在线指南,但我从未见过一本详细介绍如何处理多输入的指南。我使用sigmoid作为隐藏层,tanh作为输出层

+

示例训练数组:

13  tcp telnet  SF  118 2425    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   1   0   0   26  10  0.38    0.12    0.04    0   0   0   0.12    0.3 anomaly

0   udp private SF  44  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   4   3   0   0   0   0   0.75    0.5 0   255 254 1   0.01    0.01    0   0   0   0   0   anomaly

0   tcp telnet  S3  0   44  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   0   0   1   0   0   255 79  0.31    0.61    0   0   0.21    0.68    0.6 0   anomaly
最后一列(异常/正常)为预期输出。我把所有的东西都变成数字,所以每个单词都可以用一个唯一的整数来表示

我一次给网络一个数组,然后使用最后一列作为预期输出来调整权重。我有大约300个这样的阵列

至于隐藏的神经元,我试着从3,6和20,但没有改变

+


为了更新权重,我计算了输出层和隐藏层的梯度。然后我计算delta并将它们添加到相关的权重中。我不明白如何才能学会将多个输入映射到多个输出。它看起来是线性的。

如果对神经网络进行过多训练,相对于通过反向传播算法的迭代次数,在一个数据集上,权重最终将收敛到一种状态,在这种状态下,它将为该特定训练集提供最佳结果。它只会了解特定训练集的输入数据和目标数据之间的关系,而不会了解您可能正在寻找的更广泛、更一般的关系。最好合并一些独特的集合,并在完整集合上训练您的网络


如果没有看到反向传播算法的代码,我就不能给你任何关于它是否正常工作的建议。我在实现反向传播时遇到的一个问题是没有正确地计算输入值周围激活函数的导数。这个网站对我很有帮助

任何神经网络都不应该知道多种技巧。 你训练他们完成特定的任务

是的,他们也可以接受其他任务的培训 但之后,它们会针对另一项任务进行优化

因此,这就是为什么您应该为您的网络创建加载和保存功能,以便您可以轻松地切换大脑并执行其他任务(如果需要)。
如果您不确定当前的任务是什么,请训练神经以找出任务之间的差异。

请给出一个“多训练集”的示例。你使用了多少隐藏的神经元?你按什么顺序展示训练集?我不明白。您前面的示例建议3个输入,2个输出。但是,所展示的训练阵列显示了大约40个输入和一个输出。哪一个是正确的?前面的例子只是一个例子来说明和交流我的问题背后的想法。添加的示例培训数据是我正在处理的实际数据。但我看不出这有什么关系,因为不管每一层中有多少神经元,问题仍然存在。你的300个阵列中有多少被归类为“异常”?您多长时间向培训阶段介绍一次?你的backprop中是否有一个系数,根据网络已经学习到的内容对当前输入进行加权?据我所知,经过几步之后,您的网络“忘记”了第一个培训阵列的答案。这就是你想说的吗?我也有同样的问题。你对解决这个问题有什么想法吗?这和我用的指南完全一样。我甚至一步一步地测试我的程序,看看我的权重和输出值是否有相同的变化。当我使用他在程序截图中使用的相同参数时,我的程序进行了精确的计算。你能澄清你所说的“合并不同的集合”和“在整个集合上进行训练”是什么意思吗?对于不同的数据集,我指的是输入和目标数据,它们是唯一的/独特的,并结合起来,为神经网络提供它应该知道的所有关系。从你的帖子中,我假设你在一个阵列上训练网络300个时代,然后移动到下一个阵列。最好在一个阵列上为一个历元训练网络,然后移动到下一个阵列,依此类推,并在训练阵列上重复迭代300个历元(如果需要,可以更少)。然后在不同的数据集(模拟数据)上尝试网络。这就是我要做的。我在每次迭代中给它一个不同的数组。我使用了一个第三方库,虽然它不识别模式,但它的输出更加多样,所以我的逻辑可能有问题。