神经网络输入不匹配(Iris数据集)

时间:2014-05-27 15:11:55

标签: 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(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

在算法的火车部分,它给了我一个输入错误,这对我来说很奇怪。

错误消息:

  

使用trainlm时出错(第109行)输入数量不匹配   net.numInputs。

     

网络/火车出错(第106行)[net,tr] =   feval(net.trainFcn,网,X,T,僖,艾,EW,net.trainParam);

我设法解决了所有工作后,这里的代码适用于任何在未来gl中有相同问题的人: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} =  [m(test(c,i),1) m(test(c,i),2) m(test(c,i),3)  m(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);
    b = zeros(3,m);
    for j = 1:n
        for k = 1:m
            if isequal(a(j,k),{'setosa'}) b(1,k) = 1; b(2,k) = 0; b(3,k) = 0;
            elseif isequal(a(j,k),{'versicolor'}) b(1,k) = 0; b(2,k) = 1; b(3,k) = 0;
            else b(1,k) = 0; b(2,k) = 0; b(3,k) = 1;
            end
        end
    end
    CC{i} = b;
end
CC = CC';


net = newff(minmax(CeDam{1}),[3 3 3],{'logsig','logsig','logsig'},'trainlm');
net.LW{2,1} = net.LW{2,1}*0.6;
net.b{2} = net.b{2}*2;
net.performFcn = 'mse';
net.trainParam.epochs = 100; 

errglob = 0;
i = 1;
j = 1;

while i <= 10

    while j <= 10
        if i~=j net = train(net,CeDam{j},CC{j});
        end
    j=j+1;
    end
    y=sim(net,CeDam{i});
    y=round(y);
    e = y - CC{i};
    errcur=mse(net,CC{i},y);
    errglob = errglob + mse(net,CC{i},y);
    fprintf('Avem o eroare de %.2f pe foldul %d \n',errcur,i)
  i=i+1;  
end
errglob/10    

这个帖子可以关闭thx:)

1 个答案:

答案 0 :(得分:0)

我认为你在混合单元格和数组格式方面遇到了一些问题......

尝试替换:

net = train(net,CeDam{j},CeVrem{j});

由:

net = train(net,cell2mat(CeDam{j}),cell2mat(CeVrem{j}')');

AND:请删除i中的无限循环,添加i=i+1;或将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

AND:你在循环中使用i在哪里?我想那里缺少一些东西......