使用反向传播算法测试的字符识别

时间:2017-08-28 05:38:05

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

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

1 个答案:

答案 0 :(得分: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. 如果是平局,请在所有搭售课程之间随意选择
  6. 除了

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

    如果您查看5x7图像,可以告诉图像最初的编号是多少?似乎将图像缩小到这个大小会丢失过多的信息,而网络无法区分这些信息。

    调试

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

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