0

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

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

不过这似乎不对。训练应该与识别任何角色分开吗?我想要发生的事情如下。

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

2)使用这个训练有素的网络来识别不同图像文件中的字母。

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

4

1 回答 1

0

好的,所以这里的问题似乎更像是“我如何使用神经网络”我可以在这里概述基本程序以试图巩固你的想法,但就实际实施而言,你'是你自己的。我个人认为专有语言 (MATLAB) 令人厌恶,但我始终欣赏知识分子的热情。

神经网络的基本概念是,您有一系列层中的节点,这些节点具有连接它们的权重(取决于您想要做什么,您可以将每个节点连接到上面和下面的层,或者连接每个节点,或者之间的任何地方。)。每个节点都有一个“功函数”或一个概率函数,表示给定节点或神经元将评估为“on”或 1 的机会。

一般工作流程从您拥有的任何顶层神经元/节点开始,将它们初始化为您的数据值(在您的情况下,您可能会将这些中的每一个作为图像中的像素值开始,标准化为二进制将最简单)。然后将这些节点中的每一个乘以权重并向下馈送到您的第二层,这将被视为“隐藏层”,具体取决于将与工作函数来确定隐藏层的状态。

最后一点有点理论,很难理解,所以这里有一个例子。想象你的第一行有三个节点([1,0,1]),连接这三个节点到第二层第一个节点的权重类似于([0.5, 2.0, 0.6]). 如果你正在做一个算术和,这意味着你的“隐藏层”中第一个节点的权重将是

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

如果您使用逻辑函数作为工作函数(一个非常常见的选择,尽管 tanh 也很常见),这将使该节点评估为 1 的机会约为 75%。

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

在你启动并运行它之后,你想要训练它,因为你可能只是随机播种你的权重,这是有道理的。对此有很多不同的方法,但我一般会概述反向传播,这是训练神经网络的一种非常常见的方法。这个想法本质上是,因为您知道应该识别图像的哪个字符,您将结果与模型实际预测的结果进行比较。如果您的模型准确地预测了您没问题的角色,您可以让模型保持原样,因为它有效。如果您预测了一个不正确的字符,您希望通过您的神经网络返回并增加从您输入的像素节点到应该被预测的字符的结束节点的权重。

希望对您有所帮助,如果您还有其他问题,请告诉我。

于 2013-04-22T04:15:30.323 回答