7

我正在尝试添加单层神经网络的代码,该网络将位图作为输入,并有 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

提前感谢您的帮助,我已经阅读了很多示例和教程,但我仍然无法确定如何正确执行所有操作。

4

3 回答 3

1

迪伦,这可能是在你的家庭作业到期之后很久,但我确实对你发布的内容有一些想法。

  • 使隐藏层远大于输入位图的大小。
  • 输入 -> 隐藏与隐藏 -> 输出的权重和偏差应该不同。
  • 花很多时间在你的错误函数(鉴别器)上。
  • 了解神经网络倾向于快速锁定一组权重(通常是不正确的)。您需要重新开始并以不同的顺序进行训练。

我从神经网络中学到的一点是,你永远不知道它们为什么工作(或不工作)。仅这一点就是将其排除在医学和金融领域之外的理由。

于 2010-11-30T19:47:09.190 回答
0

偏差项的使用而言,我发现了为什么使用偏差/阈值部分?comp.ai.neural-nets FAQ中非常有用。我强烈建议阅读该常见问题解答。

于 2012-09-19T04:22:01.917 回答
0

您可能想阅读http://www.ai-junkie.com/ann/evolved/nnt1.html。它在那里准确地提到了你正在做的事情。它还提供了代码以及(大部分)关于它如何学习的简单解释。尽管学习方面与前馈完全不同,但这应该可以让您对 NN 的性质有所了解。

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

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

于 2010-12-12T08:10:23.423 回答