Matlab 神经网络错误:输入 1 大小与 net.inputs1.size 不匹配
Posted
技术标签:
【中文标题】Matlab 神经网络错误:输入 1 大小与 net.inputs1.size 不匹配【英文标题】:Matlab neural network error: Input 1 size does not match net.inputs1.sizeMatlab 神经网络错误:输入 1 大小与 net.inputs1.size 不匹配 【发布时间】:2014-02-13 04:18:13 【问题描述】:我有一个 90×50 的矩阵来保存我的训练数据。每行包含从数字输入图像中提取的特征(已读取 90 张图像 - 每个数字 10 张图像)。前 10 行是从数字 1
的 10 个图像中提取的,后 10 行是从数字 2
的 10 个图像中提取的,依此类推,因此是 size(dataset,1) = 90
我的代码的神经网络部分如下所示:
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),并在我训练有素的网络的帮助下猜测它是哪个数字。我使用了下面的代码,但它确实会产生错误:
[a,b]=max(sim(net,m_normalized));
disp(b);
msgbox(['digit is: ' num2str(b)],'Digit recognized','help');
错误信息如下所示:
Error using network/sim (line 130)
Input 1 size does not match net.inputs1.size.
Error in Neural (line 92)
[a,b]=max(sim(net,m_normalized));
您知道如何从脚本中获取输出,显示输入图像是哪个数字吗? 顺便说一下,完整的脚本代码在这里供进一步参考:
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');
【问题讨论】:
为什么不检查Input 1 size
和net.inputs1.size
是否相同?
也许我不知道它们在我的代码中到底是什么部分:这就是 matlab 所说的:>> net.inputs1 ans = Neural Network Input name: 'Input' feedbackOutput: [] processFcns: 'fixunknowns', removeconstantrows, mapminmax processParams: 1x3 cell array of 2 params processSettings: 1x3 cell array of 3 settings processedRange: [50x2 double] processedSize: 50 range: [50x2 double] size: 50 userdata: (your custom info)
matlab 是否通过“输入 1”表示“网络”?
我认为你应该检查m_normalized
size 和net.input1
size
m_normalized 是一个 1x50 向量,net.inputs1.size 是 50。嘿伙计!当作为参数发送到 fix() 时,我转置了 m_normalized。错误消失了!但它总是给出 1 作为结果,无论我给它什么数字的图像。
那么我认为你在训练和为你可能的 MLP 选择什么方面有问题。
【参考方案1】:
用于训练神经网络的输入和用于在训练后模拟网络的输入的大小必须匹配。在上面的问题中,输入是一个 50x90 的矩阵。每列代表一个数字。每列都有相应的输出。因此模拟结果(输出)被分配给一个变量(b)然后显示。
上面产生错误的代码是这样的:b=sim(net,m_normalized);
由于 m_normalized 是一个输入,它必须匹配用于训练网络的列。假设它是其中一列。所以我们必须将其转置为一个 50x1 的向量来匹配 50x90 形式的训练输入:b=sim(net,m_normalized');
修复错误。
【讨论】:
以上是关于Matlab 神经网络错误:输入 1 大小与 net.inputs1.size 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MATLAB 中为图像使用自定义神经网络函数 [关闭]
在使用 Matlab Builder NE 编译 COM 服务器时,我不断收到错误消息:“描述:MCR 实例不可用”