0

最近我发布了很多关于我正在制作的字符识别程序的问题。我以为直到今天我才能完全正常工作。我认为这与我对网络的训练有关。以下是对我认为训练和模拟过程如何进行的解释。

给这两张图

目标

在此处输入图像描述

输入

在此处输入图像描述

我想训练网络识别字母 D。请注意,在完成此操作之前,我已将图像处理成二进制矩阵。对于我使用的培训

[net,tr] = train(net,inputs,targets);

我是目标而不是输入,因为我想训练网络识别目标图像中的所有字母。

然后我跑

outputs = sim(net,inputs);

其中输入是带有字母“D”的图像,或带有 ABCD 中任何其他字母的图像。这里的基本前提是我想训练网络识别 ABCD 中的所有字母,然后选择任何字母 A、B、C 或 D,看看网络是否识别出这个选择的字母。

问题:

我对培训程序是否正确?

4

1 回答 1

0

好吧,这在很大程度上取决于您如何实现神经网络。尽管关于您提出的问题,我猜您自己并没有实现它,而是使用了一些现成的 API。

无论如何,您应该在使用它们之前先了解您使用的工具(这里是神经网络)。

神经网络接受输入并对输入执行线性或非线性变换并返回输出。

输入和输出始终是数值。然而,它们可能代表任何类型的数据。

输入可以是:

  • 图像的像素
  • 实值或整数属性
  • 类别
  • 等等

在您的情况下,输入是您的字符图像(您的二进制矩阵)的像素。

输出可以是:

  • 类(如果你正在做分类)
  • 值(如果你正在做回归)
  • 时间序列中的下一个值(如果您正在进行时间序列预测)

在您的情况下,您正在进行分类(预测输入代表哪个字符),因此您的输出是一个类。

为了让您了解网络是如何训练的,我将首先解释如何在训练后使用它,然后解释它对训练阶段的含义。

所以一旦你训练了你的网络,你会给它代表你的图像的二进制矩阵,它会输出类(字符),例如:0 代表 A,1 代表 B,2 代表 C 和 3对于 D。换句话说,你有:

  • 输入:二进制矩阵(图像)
  • 输出: 0、1、2 或 3(取决于网络在图像中识别出的字符)

训练阶段包括告诉网络您希望每个输入的输出。

训练阶段使用的数据类型与“预测阶段”使用的数据类型相同。因此,对于训练阶段:

  • 输入:二进制矩阵 [A,B,C,D] (每个字母一个!非常重要!)
  • 目标:对应的类[0,1,2,3]

这样,你告诉网络学习如果你给它 A 的图像它应该输出 0,如果你给它 B 的图像它应该输出 1,依此类推。

注意:您错了,因为您认为“输入”是在训练阶段之后要给网络的输入,而实际上它们是在训练阶段给网络的输入。

于 2013-05-04T21:49:23.230 回答