网络输入大小的问题

时间:2013-05-03 01:59:15

标签: matlab neural-network

我已经在MATLAB中开展了一个字符识别程序,并且有一些关于stackoverflow的问题,并收到了很好的反馈。所以我想我会再试一次运气。

问题:我在网络列车中收到此错误。

“输入1大小与net.inputs {1} .size不匹配。”

我正在使用下面的图片。我想使用图片1来训练我的网络以识别图片2中的内容。在我训练网络之前,我预先处理图像。我写了一个程序来提取图像中的每个字母并将图像转换为二进制矩阵。例如,如果我的每个字母的网格是10x10,那么在我的第一个图像中,我将有一个10x10x4矩阵,第二个图像是10x10x2。

所以现在我有一个目标矩阵10x10x4和一个输入矩阵10x10x2。

为了训练网络,我需要重新整形图像中的每个10x10图层,以便使用(:)运算符将每个图层“转换”为一行。所以现在目标矩阵的大小为4x100,输入矩阵的大小为2x100。

培训 我的理解是,为了让网络得到训练以识别第一个图像(目标)中的角色,我需要用这些目标训练网络。因此,我使用以下代码。

[net, tr] = trainNNet(100, train, targets);

为了执行实际识别,我模拟输入矩阵中每行的网络并使用索引记录输出。所以我使用for / loop逐行遍历输入矩阵,模拟网络,并将输出发送到我的findmatch函数。此函数的目的是查找输入数组匹配的目标中的行。这对此错误并不重要。

[r c d] = size(input);

for k = 1:d
    input = input(k,:);
    outputs = round(sim(net,input));

    [matched(:,k), ind(:,k)] = findmatch(outputs, targets);
end

我想知道为什么我一直收到错误“输入1大小与net.inputs {1} .size不匹配。” 如果输入图像中只有一个字母,则此程序可以正常工作。任何建议都将不胜感激。

targets

input

编辑:我上面提到我使用了(:)运算符。这是个错误。我使用以下代码将矩阵重塑为我需要的东西。

[r c d] = size(input);
C = permute(input,[3 2 1]);
newinput = reshape(C,d,r*c,1);

例如,给定以下矩阵:

input(:,:,1) = [1 2;3 4];
input(:,:,2) = [5 6;7 8];
input(:,:,3) = [9 10;11 12];

你会得到:

newinput = [1,2,3,4;5,6,7,8;9,10,11,12];

另外,我错误地说这适用于一个字母。如果我使用我想要识别的字母训练网络,这适用于一个字母。我训练使用,

[net, tr] = trainNNet(100, input, targets);

其中输入为1x100(对于一个字母)。

1 个答案:

答案 0 :(得分:0)

假设我理解为了训练网络,我使用目标值作为目标,也作为输入,我找到了一种方法来模拟运行。

对于模拟中的输入,您必须添加零行,以便生成的输入矩阵与目标矩阵的大小相同。