【问题标题】:Confusion with neural networks in MATLAB与 MATLAB 中的神经网络混淆
【发布时间】:2013-04-14 20:03:50
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你能澄清你的问题吗?我不确定你在这个过程的哪一部分遇到了麻烦。您还可以发布一些代码吗?一般来说,如果没有对它的工作原理有很强的直观理解,试图实现一个机器学习方法只会以泪水告终。您的代码中是否存在概念问题或错误?
  • 发布我的代码会有点困难,因为我已经为它实现了一个 GUI。当我开发这个程序时,我意识到我可能想错了。我在整个过程中遇到问题。我什么时候才能看到网络是否可以识别我给它的任何输入?我的理解是,我为字母 A 到 Z 训练网络,然后我为使用 bwlabel 的图像处理中的任何字母或字母提交一个逻辑数组。我希望得到网络的回复,说明我的信件是否被认可。

标签: image matlab neural-network


【解决方案1】:

好的,所以这里的问题似乎更像是“我如何使用神经网络”我可以在这里概述基本程序以试图巩固你的想法,但就实际实施而言它是你自己的。就我个人而言,我认为专有语言 (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 个节点,每个字母一个,但您可以添加更多隐藏层来改进您的模型。您会假设您的模型预测的字母将是具有最大权重标题的最终节点。

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

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

【讨论】:

  • 我想我的问题是为什么我们要使用目标和我们想要识别的内容来训练网络。我的理解是,我们希望仅基于目标“构建”一个完美的网络,获取该网络的权重,然后提交我们的图像以获得识别并查看结果。我只是不明白为什么我们在训练过程中使用我们有问题的图像。
  • 等等,你不明白为什么要训练网络吗?或者您对有监督和无监督训练方法之间的区别感到困惑?你训练网络的原因是因为随机权重没有意义。对于您进行的任何识别,权重也完全相同。这就是神经网络的意义所在。此外,理想情况下,您应该拥有不同的训练和测试集。在一组图像上训练网络,并在另一组图像上进行测试。
  • 我跟随 MATLAB 生成的代码。我理解我们为什么要训练网络。明天我会发布生成代码的 sn-p。
猜你喜欢
  • 2015-05-01
  • 1970-01-01
  • 2016-09-11
  • 2015-07-21
  • 2015-12-03
  • 2011-08-23
  • 2014-01-15
  • 2010-11-20
  • 2011-07-31
相关资源
最近更新 更多