教ANN如何添加
本文关键字:添加 何添加 ANN | 更新日期: 2023-09-27 18:34:45
前言:我目前正在学习ANN,因为我在~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。
我没有判断这一点的参考框架。这正常吗?我没有足够的输入吗?我的数据是否不完整或不够随机,或者权重太大?
你不是第一个问这个问题的人。 教ANN添加似乎是合乎逻辑的。 我们教它们充当逻辑门,为什么不教加法/乘法运算符。 我不能完全回答这个问题,因为我自己还没有研究过ANN在这种情况下的表现。
如果您只是教授加法或乘法,则线性输出且没有隐藏层可能会获得最佳结果。 例如,要学习相加,两个权重需要为 1.0,偏置权重必须为零:
线性( (输入 1 * W1( + (输入 2 * W2( + 偏置( =成为线性( (输入 1 * 1.0( + (输入 2 * 1.0( + (0.0( ( =
训练 sigmoid 或 tanh 可能更成问题。权重/偏差和隐藏层基本上必须撤消 sigmoid 才能真正回到上面的添加。
我认为部分问题在于神经网络正在识别模式,而不是真正学习数学。
ANN可以学习任意函数,包括所有算术。例如,证明了N个数的加法可以通过深度为2的多项式大小网络来计算。教授 NN 算术的一种方法是使用二进制表示(即不是来自 100 的规范化输入,而是一组输入神经元,每个神经元代表一个二进制数字,并且输出表示相同(。这样,您将能够实现加法和其他算术。有关学习算术中使用的ANN拓扑的进一步讨论和描述,请参阅本文。
附言。如果你想使用图像识别,开始使用原始数据集进行练习并不是一个好主意。尝试一些经过充分研究的数据集,如MNIST,其中知道正确实现的算法可以预期的结果。掌握经典示例后,您可以开始使用自己的数据。
我正在演示一个演示中,该演示使计算机学习如何乘法,我分享了我在这方面的进展:正如Jeff建议的那样,我使用了线性方法,特别是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
如果您对这个演示感兴趣,请告诉我。我很乐意分享。