用于字母识别的神经网络

时间:2010-10-14 03:47:34

标签: java neural-network backpropagation

我正在尝试添加单层神经网络的代码,该网络将位图作为输入,并且有26个输出用于字母表中每个字母的可能性。

我的第一个问题是关于正在添加的单个隐藏层。我是否认为隐藏层只有自己的一组输出值和权重?它不需要有自己的偏见'?

我还可以确认我正在考虑前馈方面吗?这是一些伪代码:

// input => hidden
for j in hiddenOutput.length:
    sum=inputs*hiddenWeights
    hiddenOutput[j] = activationFunction(sum)
// hidden => output
for j in output.length:
    sum=hiddenOutputs*weights
    output[j] = activationFunction(sum)

假设这是正确的,培训会是这样的吗?

def train(input[], desired[]):
    iterate through output and determine errors[]
    update weights & bias accordingly
    iterate through hiddenOutput and determine hiddenErrors[]
    update hiddenWeights & (same bias?) accordingly

在此先感谢您提供任何帮助,我已经阅读了很多示例和教程,而且我仍然无法确定如何正确执行所有操作。

3 个答案:

答案 0 :(得分:1)

迪伦,这可能是你的家庭作业到期后很长一段时间,但我对你发布的内容有一些想法。

  • 使隐藏图层大于输入位图的大小。
  • 您应该从输入中获得不同的权重和偏见 - >隐藏而不是隐藏 - >输出。
  • 在错误功能(鉴别器)上花费大量时间。
  • 了解神经网络有被快速锁定到一组权重(通常是不正确的)的倾向。你需要重新开始并以不同的顺序训练。

我学到的关于神经网络的事情是,你永远不知道他们为什么工作(或不工作)。仅此一点就是让它远离医学和金融领域的理由。

答案 1 :(得分:0)

您可能需要阅读http://www.ai-junkie.com/ann/evolved/nnt1.html。在那里,它提到了你正在做的事情。它还提供了代码以及(大多数)简单的解释,了解它是如何学习的。尽管学习方面与前馈完全不同,但我们希望能够为您提供有关NN本质的一些想法。

我相信即使隐藏和输出层也应该有偏见。

同样NN可能很棘手,首先尝试识别1个字母。仅从单个输出获得一致的高/低信号。然后尝试用同一个字母的不同变体保持该信号。然后你可以进步并添加更多。您可以通过教授26个不同的网络来实现这一点,这些网络仅在匹配时提供输出。或者你可能把它作为一个具有26个输出的大型NN。两种不同的方法。

答案 2 :(得分:0)

就使用偏见术语而言,我发现Why use a bias/threshold?中的comp.ai.neural-nets FAQ部分非常有用。我强烈建议阅读常见问题解答。