【问题标题】:Character Recognition Using Back Propagation Algorithm Testing使用反向传播算法测试的字符识别
【发布时间】:2017-08-28 05:38:05
【问题描述】:

最近我一直在使用反向传播算法进行字符识别。我已经拍摄了图像并缩小到 5x7 大小,因此我得到了 35 个像素并使用这些像素训练了网络,这些像素具有 35 个输入神经元、35 个隐藏节点和 10 个输出节点。我已经成功地完成了训练,我得到了我需要的重量。我被困在这里了。我有我的测试集,我知道我应该前馈网络。但我不知道具体该怎么做。我的测试集将是 4 个 1x35 的样本。我的输出层有 10 个神经元。如何准确区分字符与我将获得的输出?我想知道这个测试是如何工作的。请指导我完成这个阶段。提前致谢。

【问题讨论】:

  • 我使用 Sigmoid 作为目标函数。我使用反向传播算法训练
  • 抱歉不清楚。这是梯度下降。
  • 对不起@jodag 我没有在目标函数和激活函数之间考虑太多
  • 好的,所以我猜每个输出神经元代表十位数之一?如果是这种情况,那么您需要使用具有最高响应的输出神经元的索引来标记每个测试集。
  • 好的,我会清楚地了解网络。对于包含 1 和 5*7 大小的图像 ->35 个输入神经元并针对输出 [1 0 0 0 0 0 0 0 0 0] 和 2 ->[0 1 0 0 0 0 0 0 0 0] 进行训练,并且持续 10 个不同的数字。

标签: matlab machine-learning neural-network ocr backpropagation


【解决方案1】:

一对一

测试这些类型的神经网络的常用方法是“one-vs-all”方法。我们将每个输出节点视为其自己的分类器,它给出了样本是该类与不是该类的概率。

例如,如果您通过网络输出 [1, 0, ..., 0],则第 1 类很有可能是第 1 类而不是第 1 类。第 2 类很可能是第 2 类而不是第 2 类等。

领带

在平局的情况下,随机函数打破平局是很常见的(在研究中)。如果您得到 [1, 1, 1, ..., 1] 则该函数将从 1-10 中选择一个数字,这就是您的预测。在实践中,有时会使用专家系统来打破平局。也许 1 类比 2 类贵,所以我们优先选择 2 类。

步骤

所以步骤是:

  1. 将数据集拆分为测试/训练集
  2. 火车上的火车重量
  3. 通过神经网络向前传递测试集
  4. 对于每个样本,选择 argmax(具有最高值的输出)作为您的预测
  5. 如果出现平局,请在所有平局类别中随机选择

一边

在您的特定情况下,我想实施此策略将导致网络几乎不超过随机性能 (1​​0%) 的准确性。 我建议重新考虑网络架构。

如果您查看 5x7 图像,您能分辨出该图像最初的编号吗?将图像缩小到这个大小似乎会丢失太多网络无法区分类别的信息。

调试

根据您的描述,在调试您的网络时,我会查看以下内容。

  1. 您的数据预处理(缩减)是否泄露了太多信息?通过手动检查一些图像并查看您是否可以判断图像应该是什么来检查这一点。
  2. 你的 one-hot 算法有效吗?当您转换目标进行训练时,它是否成功转换 1 -> [1, 0, 0, ..., 0]?
  3. 您的反向传播/梯度下降算法是否正确?在训练过程中,您应该(大致)看到损失函数单调下降。尝试在每一步(或每几步)打印您正在优化的损失。甚至对于一个非常简单的直觉检查,打印均方误差:(P-Y)^2

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2013-11-28
    • 2012-03-14
    • 2017-03-13
    • 2014-01-10
    • 1970-01-01
    • 2017-05-12
    • 2016-10-16
    相关资源
    最近更新 更多