Matlab 神经网络输入错误匹配(Iris数据集)
我目前有一个错误,我无法通过这是简短的代码和所有需要的,以便有一个关于我的问题的一般性想法Matlab 神经网络输入错误匹配(Iris数据集),matlab,neural-network,cell,Matlab,Neural Network,Cell,我目前有一个错误,我无法通过这是简短的代码和所有需要的,以便有一个关于我的问题的一般性想法 clear; close all; clear ; load fisheriris; m = meas; d = num2cell(m); d(:,5) = species(:,1); c = cvpartition(d(:,5),'kfold',10); CeDam = cell(10,1); CeVrem = cell(10,1); for i=1:10 CeDam{i} = [d(
clear;
close all; clear ;
load fisheriris;
m = meas;
d = num2cell(m);
d(:,5) = species(:,1);
c = cvpartition(d(:,5),'kfold',10);
CeDam = cell(10,1);
CeVrem = cell(10,1);
for i=1:10
CeDam{i} = [d(test(c,i),1) d(test(c,i),2) d(test(c,i),3) d(test(c,i),4)]';
end
for i=1:10
CeVrem{i} = d(test(c,i),5)';
end
for i = 1:10
a = CeVrem{i};
[n,m] = size(a);
for j = 1:n
for k = 1:m
if isequal(a(j,k),'setosa') a{n,m} = [1 0 0];
elseif isequal(a(j,k),'versicolor') a{n,m} = [0 1 0];
else a{j,k} = [0,0,1];
end
end
end
CeVrem{i} = a;
end
net = newff(cell2mat(minmax(CeDam{1})),[3 3 3],{'logsig','logsig','logsig',},'trainlm');
net.LW{2,1} = net.LW{2,1}*0.5;
net.b{2} = net.b{2}*2;
net.performFcn = 'mse';
net.trainParam.epochs = 100;
err = 0;
i = 1;
j = 1;
while i <= 10
while j <= 10
if i~=j net = train(net,CeDam{j},CeVrem{j});
end
j=j+1;
end
end
清晰;
全部关闭;清楚的
装载鱼鳞;
m=最小均方误差;
d=num2单元(m);
d(:,5)=物种(:,1);
c=CVD(d(:,5),'kfold',10);
CeDam=单元(10,1);
CeVrem=单元(10,1);
对于i=1:10
CeDam{i}=[d(测试(c,i),1)d(测试(c,i),2)d(测试(c,i),3)d(测试(c,i),4)];
终止
对于i=1:10
CeVrem{i}=d(测试(c,i),5)';
终止
对于i=1:10
a=CeVrem{i};
[n,m]=尺寸(a);
对于j=1:n
对于k=1:m
如果isequal(a(j,k),'setosa')a{n,m}=[100];
elseif isequal(a(j,k),'versicolor')a{n,m}=[0110];
否则a{j,k}=[0,0,1];
终止
终止
终止
CeVrem{i}=a;
终止
net=newff(cell2mat(minmax(CeDam{1})),[3],{'logsig','logsig','logsig',},'trainlm');
net.LW{2,1}=net.LW{2,1}*0.5;
net.b{2}=net.b{2}*2;
net.performFcn='mse';
net.trainParam.epochs=100;
误差=0;
i=1;
j=1;
虽然我我认为你在混合单元格和数组格式时遇到了一些问题
尝试替换:
net = train(net,CeDam{j},CeVrem{j});
作者:
和:请通过添加i=i+1,删除i
中的无限循环编码>或将while
循环替换为更自然的for
循环,例如
for i = 1:10
for j = 1:10
if i~=j
net = train(net,cell2mat(CeDam{j}),cell2mat(CeVrem{j}')');
end
end
end
和:在循环中,您在哪里使用i
?我想这里缺少了什么…使用trainlm(第109行)时出错输入的数量与net.numInputs不匹配。网络/火车(线106)[网,Tr]=FEVAR(Net.TrfFCN,Net,X,T,席,Ai,EW,Net.TopPARAM)的错误;给你:谢谢你花时间看我的问题我知道无限循环还没有结束谢谢你让我试试你刚才说的:请注意我的编辑-你没有(认真地)在循环中使用i
。我不能使用它,因为在“CeVrem”中,我有3个类的表示[1 0],[0 1 0]。[0 0 1] . 如果我在CeVrem上做cell2mat,它会毁了它,它会像1 0 0 1 0 0 1 0 0 0 1 0或类似的东西:D,即使我不这样做,这是错误,我使用trainlm(第109行)输入得到错误,目标有不同数量的样本。网络/火车(线106)[网,Tr]=FEVAR(Net.TrfFCN,Net,X,T,席,Ai,EW,Net.TopPARAM)的错误;考虑到一个是4x15,另一个是1x15,这是非常奇怪的:是的,代码的一部分丢失了,因为它与我想简化的内容无关:)y=sim(net,cellFold{i});e=y-单元目标{i};%error=numel(find(e~=0))/length(y)err=mse(net,cellTargets{i},y);fprintf('Eroare pe foldul%d este%.2f\n',i,err)fprintf('Numarul de example gresite pe foldul%d este%d\\30\n',i,numel(find(e~=0)))error=error+mse(net,cellTargets{i},y);i=i+1;这就是我被使用的地方:D我做了另一个项目,但在那里我只有2个类,3个不知道如何在没有单元格的情况下编写它们,所以我可以使用cvpartition
net = train(net,cell2mat(CeDam{j}),cell2mat(CeVrem{j}')');
for i = 1:10
for j = 1:10
if i~=j
net = train(net,cell2mat(CeDam{j}),cell2mat(CeVrem{j}')');
end
end
end