首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab神经网络错误:输入1大小与net.inputs{1}.size不匹配

Matlab神经网络错误:输入1大小与net.inputs{1}.size不匹配
EN

Stack Overflow用户
提问于 2014-01-22 21:23:13
回答 1查看 11.7K关注 0票数 4

我有一个90×50的矩阵来保存我的火车数据。每行保留从输入的数字图像中提取的特征(90幅图像已被读取--每一位数字有10幅图像)。从10幅数字1图像中提取前10行,从10幅数字2图像中提取第2 10行,等等,因此size(dataset,1) = 90

神经网络是我代码的一部分,如下所示:

代码语言:javascript
运行
复制
T=zeros(1,90);
for  i=1:90
    T(i)=ceil(i/10);
end
setdemorandstream(491218382);
net=fitnet(20);

[net,tr]=train(net,datasetNormalized',T);

datasetNormalized是我在0 1间隔内规范化的数据集。T是网络的目标。我现在要做的是得到一个数字的新图像,把它变成一个1×50向量(在这个例子中是m_normalized),然后用我训练过的网络猜测它是哪一个数字。我使用了下面的代码,但它确实会生成错误:

代码语言:javascript
运行
复制
[a,b]=max(sim(net,m_normalized));
disp(b);
 msgbox(['digit is: ' num2str(b)],'Digit recognized','help');

错误消息如下所示:

代码语言:javascript
运行
复制
Error using network/sim (line 130)
Input 1 size does not match net.inputs{1}.size.

Error in Neural (line 92)
[a,b]=max(sim(net,m_normalized));

你知不知道如何从脚本中得到一个输出,显示输入图像是哪个数字?顺便提一下,完整的脚本代码在这里可供进一步参考:

代码语言:javascript
运行
复制
clc
clear
close all

numOfPhotos = 90;
imgRows = 100;
imgCols = 50;
X = zeros(numOfPhotos, (imgRows * imgCols) / 100);

%% Resize Images
% myresize(imgRows,imgCols);

% read train images
datasetIndex = 0;    

for i = 1:numOfPhotos/10
    for j = 1:numOfPhotos/9           
        datasetIndex = datasetIndex+1;
        im = imread(['resized_train_numbers\' num2str(i) ' (' num2str(j) ').jpg']);
        im = im2bw(im, graythresh(im));    

        c = 1;
        for g = 1:imgRows/10
            for e = 1:imgCols/10
                s = sum(sum(im((g*10-9 : g*10),(e*10-9 : e*10))));
                X(datasetIndex, c) = s;
                c = c+1;            
            end    
        end
    end
end

datasetNormalized = zeros(numOfPhotos, imgRows*imgCols/100);
%% Normalize dataset contents
minDataset = min(min(X));
maxDataset = max(max(X));
for i = 1:numOfPhotos
    for j = 1:imgRows*imgCols/100
        datasetNormalized(i, j) = (X(i, j) - minDataset) / (maxDataset - minDataset);
    end
end

%%Neural network part

T = zeros(1, 90);
for  i = 1:90
    T(i) = ceil(i/10);
end

setdemorandstream(491218382);
net = fitnet(20);
[net, tr]=train(net, datasetNormalized', T);

% Read input image for recognition

newImg = imread('plate_1\1.jpg');
newImg = imresize(newImg, [imgRows imgCols]);
newImg = im2bw(newImg, graythresh(newImg));
scrsz = get(0, 'ScreenSize');
figure('Position', [1 1 scrsz(3)/3 scrsz(4)/2]),
imshow(newImg);

m = zeros(1, imgRows*imgCols/100);
c = 1;
for g = 1:imgRows/10
    for e = 1:imgCols/10
        s = sum(sum(newImg((g*10-9 : g*10), (e*10-9 : e*10))));
        m(c) = s;
        c = c+1;            
    end
end

%Normalize m contents
m_normalized = zeros(1, imgRows*imgCols/100);
for i = 1:imgRows*imgCols/100    
    m_normalized(i) = (m(i)-min(m)) / (max(m)-min(m));
end

[a,b] = max(sim(net, m_normalized));
disp(b);
msgbox(['digit is: ' num2str(b)], 'Digit recognized', 'help');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-23 10:11:17

用于训练神经网络的输入和训练后用于模拟网络的输入的大小必须匹配。在上面的问题中,输入是50x90矩阵。代表数字的每一列。每一列都有相应的输出。因此,仿真结果(输出)被分配到一个变量(B)中,然后显示。上面生成错误的代码如下所示:

b=sim(net,m_normalized);

因为m_normalized是一个输入,所以它必须匹配用于训练网络的列。假设它是其中的一个列。因此,我们必须将其转换成一个50x1矢量,以匹配50x90形式的训练输入:

b=sim(net,m_normalized');

修正错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21294252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档