我正在使用神经网络进行字符识别(以及后来的指纹识别)。我对事件的顺序感到困惑。我用26个字母训练网。稍后我会增加这个包括26个干净的字母和26个嘈杂的字母。如果我想识别一个字母说“A”,那么这样做的正确方法是什么?这就是我现在正在做的事情。
1)使用26x100矩阵训练网络;每行包含来自bmp(10x10)分段的字母。 2)但是,对于测试目标,我使用输入矩阵“A”。我在第一行之后有25行零,这样我的输入矩阵与我的目标矩阵的大小相同。 3)我运行perform(net,testTargets,outputs),其中输出是使用26x100矩阵训练的网络的输出。 testTargets是“A”的矩阵。
但这似乎并不正确。训练是否与识别任何角色分开?我想要发生的事情如下。
1)训练我选择的图像文件的网络(在将图像处理成逻辑阵列之后)。
2)使用此训练过的网络识别不同图像文件中的字母。
因此训练网络识别A到Z.然后选择一个图像,运行网络以查看从拾取的图像中识别出的字母。
答案 0 :(得分: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个节点,每个字母一个,但您可以添加更多隐藏图层以改善模型。您可以假设模型预测的字母将是具有最大权重标题的最终节点。
在你完成并运行后,你想要训练它,因为你可能只是随机播种你的重量,这是有道理的。有很多不同的方法,但我通常会概述反向传播,这是一种非常常见的训练神经网络的方法。这个想法基本上是,因为您知道应该识别图像的哪个字符,所以将结果与模型实际预测的结果进行比较。如果你的模型准确地预测了你没有的角色,你就可以保留模型,因为它有效。如果你预测一个不正确的字符,你想要通过你的神经网络返回并增加从你输入的像素节点到结束节点的权重,该结束节点应该是预测的字符。您还应该减少导致其错误返回的字符的权重。
希望有所帮助,如果您有任何疑问,请与我联系。