教授ANN如何添加

时间:2014-12-20 16:00:10

标签: c# encog

前言:我目前正在学习人工神经网络,因为我在~83个课程中有~18.5k的图像。它们将用于训练ANN以实时识别近似相等的图像。我按照书中的图像示例,但它对我不起作用。所以我回到了开头,因为我可能错过了一些东西。

我采用了Encog XOR示例并对其进行了扩展,以教它如何添加小于100的数字。到目前为止,结果是混合的,即使是训练后的确切输入。

输入(从100标准化):0+0, 1+2, 3+4, 5+6, 7+8, 1+1, 2+2, 7.5+7.5, 7+7, 50+50, 20+20。 输出是添加的数字,然后标准化为100。

训练100,000次后,输入数据的一些样本输出:

0+0=1E-18 (great!)
1+2=6.95
3+4=7.99 (so close!)
5+6=9.33
7+8=11.03
1+1=6.70
2+2=7.16
7.5+7.5=10.94
7+7=10.48
50+50=99.99 (woo!)
20+20=41.27 (close enough)

从樱桃挑选的看不见的数据:

2+4=7.75
6+8=10.65
4+6=9.02
4+8=9.91
25+75=99.99 (!!)
21+21=87.41 (?)

我已经搞砸了图层,神经元数字和[弹性回复]传播,但我不确定它是变得越来越好。根据上述数据,这些层是2,6,1。

我没有判断这一点的参考框架。这是正常的吗?我没有足够的输入吗?我的数据是不完整还是随机,或者加权过重?

3 个答案:

答案 0 :(得分:0)

你不是第一个问这个问题的人。教导ANN加入似乎是合乎逻辑的。我们教它们作为逻辑门,为什么不加法/乘法运算符。我无法完全回答这个问题,因为我自己没有研究过它,看看ANN在这种情况下的表现如何。

如果您只是在教授加法或乘法,那么线性输出和没有隐藏层可能会获得最佳结果。例如,要学习添加,两个权重需要为1.0,偏差权重必须为零:

线性((input1 * w1)+(input2 * w2)+ bias)= 变 线性((input1 * 1.0)+(input2 * 1.0)+(0.0))=

训练sigmoid或tanh可能更成问题。权重/偏差和隐藏层基本上必须撤消sigmoid以真正回到上面的添加。

我认为问题的一部分是神经网络正在识别模式,而不是真正学习数学。

答案 1 :(得分:0)

ANN可以学习任意功能,包括所有算术。例如,proved可以通过深度为2的多项式大小网络计算N个数的加法。一种教授NN算术的方法是使用二进制表示(即不是100的标准化输入,而是一组输入神经元,每个表示一个二进制数字,并且输出的表示相同)。这样您就可以实现添加和其他算术。有关用于学习算术的ANN拓扑的进一步讨论和描述,请参见this paper

PS。如果您想使用图像识别,那么开始使用原始数据集进行练习并不是一个好主意。尝试一些经过充分研究的数据集,如MNIST,其中已知正确实现的算法可以得到什么结果。掌握了经典示例后,您可以继续使用自己的数据。

答案 2 :(得分:0)

我正处于演示的中间,让计算机学习如何繁殖并分享我在此方面的进展:正如杰夫建议我使用线性方法,尤其是ADALINE。在这一刻,我的节目"知道"如何乘以5.这是我得到的输出:


    1 x 5 ~= 5.17716232607829
    2 x 5 ~= 10.147218373698
    3 x 5 ~= 15.1172744213176
    4 x 5 ~= 20.0873304689373
    5 x 5 ~= 25.057386516557
    6 x 5 ~= 30.0274425641767
    7 x 5 ~= 34.9974986117963
    8 x 5 ~= 39.967554659416
    9 x 5 ~= 44.9376107070357
    10 x 5 ~= 49.9076667546553

如果您对此演示感兴趣,请与我们联系。我很乐意分享。