Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么具有相同属性的神经网络不同? 介绍_C++_Neural Network_Artificial Intelligence_Conv Neural Network_Fann - Fatal编程技术网

C++ 为什么具有相同属性的神经网络不同? 介绍

C++ 为什么具有相同属性的神经网络不同? 介绍,c++,neural-network,artificial-intelligence,conv-neural-network,fann,C++,Neural Network,Artificial Intelligence,Conv Neural Network,Fann,我对人工智能、机器学习和神经网络非常陌生 我尝试用快速人工神经网络库C++编写一些代码来测试这种系统的能力。 程序设计 我制作了一段代码,生成一个学习文件来处理监督学习。我已经做了一些测试,但这一测试有助于理解隐藏层的组织和AI能力之间的关系,从而解决同样的问题 为了解释我的观察结果,我将使用符号A-B-C-[…]-X来描绘A输入神经元、B第一隐层神经元、C第二隐层神经元和X输出神经元的配置 在这些测试中,学习数据是非工作函数f0=1的2k随机结果;f1=0相当于“!”用许多语言。还要注意,一个

我对人工智能、机器学习和神经网络非常陌生

我尝试用快速人工神经网络库C++编写一些代码来测试这种系统的能力。 程序设计 我制作了一段代码,生成一个学习文件来处理监督学习。我已经做了一些测试,但这一测试有助于理解隐藏层的组织和AI能力之间的关系,从而解决同样的问题

为了解释我的观察结果,我将使用符号A-B-C-[…]-X来描绘A输入神经元、B第一隐层神经元、C第二隐层神经元和X输出神经元的配置

在这些测试中,学习数据是非工作函数f0=1的2k随机结果;f1=0相当于“!”用许多语言。还要注意,一个历元表示所有学习数据的1次训练测试。人工智能将代表一个训练有素的人工神经网络

学习数据中未出现任何错误

您可以在上找到完整的源代码

越多越好 首先,我注意到1-1-1系统在37个时期比1-[50层5个神经元]-1在20k时期更强大,错误率为0.0001,错误率为0.25

我的第一个想法是,第二个人工智能需要更多的培训,因为有很多成本要最小化,但我不确定这是唯一的原因

这让我尝试了一些相同神经元总数的测试

平等就是不平等 1-2-2-1配置似乎比1-4-1更有效

事实上,当我在这两种不同的配置上运行测试时,我自己编写了这些输出测试程序。 这是两个不同的测试,9**是测试的当前索引

测试包括给AI提供0到1之间的随机整数并打印输出。每个测试都是单独运行的

// 1-2-2-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 1.000000, output : 0.009162
[938]Number : 0.000000, output : 1.000000
[939]Number : 0.000000, output : 1.000000
[940]Number : 1.000000, output : 0.009162
[941]Number : 0.000000, output : 1.000000
[942]Number : 0.000000, output : 1.000000

// 1-4-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 0.000000, output : 1.000000
[938]Number : 1.000000, output : 0.024513
[939]Number : 0.000000, output : 1.000000
[940]Number : 0.000000, output : 1.000000
[941]Number : 1.000000, output : 0.024513
[942]Number : 1.000000, output : 0.024513
您可以注意到,第一个配置的结果比第二个配置的结果更接近于0。0.009162对0.024513。这不是IEEE编码问题,如果我运行另一个测试,这两个值不会改变

原因是什么?让我们试着弄清楚

第一个配置上有多少突触? 首先

然后

决赛

所以我们得到了2+4+2=8个突触。所以有8种不同的权重

第二种配置如何? 首先

决赛

我们总共得到了4+4=8个突触。仍然有8种不同的权重

在这两个系统中,我们有4个激活函数,每个神经元1个

我们如何才能在相同的属性下获得显著的性能差异?一般来说,拥有大量节点和权重会导致神经网络过度专业化。举一个极端的例子:如果你有几千张图像,一个拥有十亿个节点和更多权重的神经网络将冒着学习训练数据中每一个像素的风险,而不是找出眼睛、耳朵。。。构成一张脸。所以,当你用不同的图像呈现过度专业化的神经网络时,它不会对它们起作用,或者至少不会那么好。它还没有解决抽象概念,例如猫有耳朵和眼睛,而房子有窗户

虽然在你的测试中没有太多需要过度专业化的地方,但你可能仍然会看到一些轻微的影响

相同属性: 重量的数量相同,但结构不同。由节点1-1-1-…-1的直线组成的神经网络的行为与更紧凑的1-20-1的行为截然不同。1-1-1-…-1网络甚至可能无法学习1-20-1网络所能学习的东西学习布尔代数时需要学习的节点数/权重有一些规则,尽管我不记得它们

我怀疑,1-4-1显示出与预期结果的更多偏差,因为每个中间节点受更多权重的影响-每个节点获得正确权重越多,训练所需的时间就越长

在1-2-2-1网络中,第一中间层每个节点只有一个权重作为输入,第二中间层每个节点有两个权重,输出层每个节点有两个权重。因此,对于每个中间节点,最多可以在两个值左右摇摆

我不知道神经网络的细节,也不知道应用权重的函数,但是如果你想到下面的例子,它可能会让事情变得清楚:

假设函数为fweight,input=input*weight+常量 此外,我们的网络是1-1,即它有一个权重需要确定 如果一个权重为-1,常数为1,那么就有了求反函数。这种神经网络在训练速度和准确度上都将超过任何更大的网络。任何具有更多节点和权重的网络都必须计算出所有权重的微妙平衡,直到找到一个代表否定概念的网络——可能神经网络会有一个 其中有很多零,即忽略该输入和一条进行求反的路径


作为下一步工作的食物:神经网络对模糊数据很好,而对于将代数函数精确到第10位则不太好。

这个问题不太适合StackOverflow,你可以尝试一下。这很难说。神经网络是复杂的动物。他们有很多旋钮和按钮需要调整和破解。它们在机器学习界也被称为黑匣子,这种模型既不能解释它们为什么工作,也不能解释它们为什么不工作,也不能解释为什么一组超参数比其他超参数更好。目前仍在继续。为了训练好的模型并更好地理解它们,您需要好的工具,比如现代神经网络框架:TensorFlow、Theano、Torch等。
first[0]->second[0]
first[0]->second[1]
second[0]->third[0]
second[0]->third[1]
second[1]->third[0]
second[1]->third[1]
third[0]->first[0]
third[1]->first[0]
first[0]->second[0]
first[0]->second[1]
first[0]->second[2]
first[0]->second[3]
second[0]->third[0]
second[1]->third[0]
second[2]->third[0]
second[3]->third[0]