Matlab 神经网络的输入和目标混淆

Matlab 神经网络的输入和目标混淆,matlab,neural-network,Matlab,Neural Network,最近我发布了许多关于我正在制作的字符识别程序的问题。我以为直到今天我都能让它充分发挥作用。我认为这与我对网络的训练有关。以下是我对培训和模拟过程的理解 给这两张图片 目标 投入 我想训练网络识别字母D。注意,在这之前,我已经将图像处理成二进制矩阵。我用它来训练 [net,tr] = train(net,inputs,targets); 这里我不是输入,而是目标,因为我想训练网络识别目标图像中的所有字母 然后我就跑 outputs = sim(net,inputs); 其中,输入是带有字母

最近我发布了许多关于我正在制作的字符识别程序的问题。我以为直到今天我都能让它充分发挥作用。我认为这与我对网络的训练有关。以下是我对培训和模拟过程的理解

给这两张图片

目标

投入

我想训练网络识别字母D。注意,在这之前,我已经将图像处理成二进制矩阵。我用它来训练

[net,tr] = train(net,inputs,targets);
这里我不是输入,而是目标,因为我想训练网络识别目标图像中的所有字母

然后我就跑

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

问题:


我的训练过程正确吗?

这在很大程度上取决于你如何实现你的神经网络。虽然关于你要问的问题,我猜你没有自己实现它,而是使用了一些现成的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,依此类推


注意:你错了,因为你认为“输入”是你想在训练阶段后给网络的输入,当它们实际上是在训练阶段提供给网络的输入时。

从错误消息中可以看出,您实际上应该在单元阵列中为网络提供输入和目标。如果X和T是单元数组,那么每个单元X{i}(i在[1,4]中)是二进制形式的字母(1x100矩阵),每个单元T{i}(i在[1,4]中)是包含0,1,2或3的单态矩阵。这样它应该可以工作,尺寸应该匹配。我仍然在@Dolma中得到错误。我把我的输入矩阵转换成一个单元矩阵,这样它就是4x100单元。我的目标数据是target=[{0}、{1}、{2}、{3}]。我仍然会犯同样的错误。我尝试将目标设置为一列单元格。不,输入必须是1x4单元格数组。每个单元是一个1x100矩阵。目标也是一个1x4单元阵列,它的每个单元都是1x1矩阵(这就是您所做的)。如果这不起作用,请尝试使用100x4矩阵作为输入,使用1x4矩阵作为目标。我现在就让它起作用了。然而,在我发布这个问题之前,我编写了一个不同的程序,它比传统的培训快得多。按照我的程序,我训练每一封信。换句话说,每个字母都有一个神经网络。当我运行模拟时,我只需使用一个我想要比较的字母(“D”)逐步遍历每个网络,然后找到性能最佳的网络。