2013-04-22 127 views
0

我正在使用神经网络进行字符识别(以及后来的指纹识别)。我对事件的顺序感到困惑。我正在用26个字母训练网络。后来我会增加这26个干净的信件和26个嘈杂的信件。如果我想识别一个字母说“A”,那么做到这一点的正确方法是什么?这是我现在正在做的事情。与MATLAB中的神经网络混淆

1)使用26x100矩阵训练网络;每行包含一个来自bmp(10x10)分段的字母。 2)但是,对于测试目标,我使用“A”的输入矩阵。我在第一行之后有25行零,以便我的输入矩阵与我的目标矩阵具有相同的大小。 3)我运行perform(net,testTargets,输出),其中输出是来自26x100矩阵训练的网络的输出。 testTargets是“A”的矩阵。

虽然这似乎不正确。训练是否单独承认任何角色?我想要发生的事情如下。

1)为我选择的图像文件(在将图像处理为逻辑数组后)训练网络。

2)使用此训练网络识别不同图像文件中的字母。

因此,训练网络以识别A到Z.然后选择图像,运行网络以查看从所选图像中识别出哪些字母。

+0

你能澄清你的问题吗?我不确定你在这个过程中遇到什么困难。你能否也发布一些代码?一般来说,如果没有对其工作原理的直观理解,实施ml方法只会以泪结束。你有一个概念上的问题,或者你的代码中存在一个错误? – 2013-04-22 02:03:53

+0

因为我已经为它实现了GUI,所以发布我的代码会有点困难。当我开发这个程序时,我意识到我可能会考虑这个错误。我在整个过程中遇到问题。我什么时候能看到网络是否可以识别我给它的任何输入?这是我的理解,我训练网络的字母A到Z,然后我提交一个逻辑阵列的任何字母或字母从图像处理使用bwlabel。我的希望是从网络得到回复,说明我的信件是否被识别。 – roldy 2013-04-22 02:41:01

回答

0

好的,所以似乎这里的问题似乎更符合“我如何神经网络”的概念,我可以概述这里的基本过程,试图巩固您的想法,但实际上,实施它你去你自己。我个人认为专有语言(MATLAB)是一种令人憎恶的东西,但我总是欣赏知识分子的热情。

神经网络的基本概念是,你有一系列层次的权重连接它们的节点(取决于你想做什么,你可以将每个节点连接到上面和下面的层,或连接每个节点或其中的任何地方)。每个节点都有一个“工作函数”或概率函数,表示给定节点或神经元将评估为“开”或1的机会。一般工作流程始于任何顶层神经元/节点把它们初始化为你的数据值(在你的情况下,你可能会开始每个这些关闭,因为图像中的像素值,归一化为二进制将是最简单的)。这些节点中的每一个然后将乘以一个权重并向下反馈给第二层,根据总和(几何或算术和,取决于您的实现)将被视为“隐藏层”,这将与工作函数来确定隐藏层的状态。

最后一点是有点理论性,很难遵循,所以这里是一个例子。假设你的第一行有三个节点([1,0,1]),并且将这三个节点连接到第二层的第一个节点的权重类似于([0.5, 2.0, 0.6])。如果你正在做的算术和这意味着,如果您使用的是逻辑功能的功函数(一个非常普遍的在你的“隐藏层”的第一个节点上的权重将

1*0.5 + 0*2.0 + 1*0.6 = 1.1

选择,虽然tanh也很常见),这会使该节点评估的机会约为75%。

您可能希望最终图层有26个节点,每个字母一个,但可以添加更多隐藏层以改善模型。你会假设你的模型预测的字母将是最大权重标题中的最后一个节点。

在你开始运行之后,你想要训练它,因为你可能只是随机播种你的权重,感。这里有很多不同的方法,但我通常会概述反向传播,这是一种非常常见的训练神经网络的方法。这个想法本质上是,因为你知道图像应该被识别哪个字符,所以你将结果与你的模型实际预测的结果进行比较。如果你的模型准确地预测了角色你很好,你可以保持原样,因为它工作。如果你预测了一个不正确的字符,你想通过你的神经网络返回,并增加从你送入的像素节点到应该被预测的字符的结尾节点的权值。您还应该减少导致不正确返回的字符的权重。

希望有帮助,让我知道你是否还有其他问题。

+0

我想我的问题是为什么我们要用目标和我们想要认识的东西来训练网络。我的理解是,我们希望仅仅基于目标“构建”一个完美的网络,获得该网络的权重,然后提交我们的图像以获得认可,并查看结果是什么。我只是不明白为什么我们在训练过程中使用我们的图像。 – roldy 2013-04-22 04:41:18

+0

等一下,你不明白你为什么要训练网络?或者你对监督式和非监督式培训方法的区别感到困惑吗?你训练网络的原因是因为随机权重没有意义。对于您所做的任何标识,权重也完全相同。这是神经网络的一个重点。最好还应该有不同的训练和测试组合。在一组图像上训练网络,并在另一组图像上进行测试。 – 2013-04-22 06:48:13

+0

我正在跟随MATLAB生成的代码。我明白为什么我们要训练网络。我会张贴生成的代码明天的片段。 – roldy 2013-04-22 07:23:44