【问题标题】:Problems with network input size网络输入大小的问题
【发布时间】:2013-05-04 04:52:47
【问题描述】:

一段时间以来,我一直在 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 不匹配。” 如果输入图像中只有一个字母,该程序可以正常工作。任何建议将不胜感激。

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

[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(一个字母)。

标签: matlab neural-network


【解决方案1】:

假设我知道为了训练网络,我将目标值用作目标值和输入值,我找到了一种让模拟运行的方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多