【问题标题】:Neural network input mistmatch (Iris Dataset)神经网络输入不匹配(Iris 数据集)
【发布时间】:2014-05-28 03:47:02
【问题描述】:

我目前有一个错误,我无法通过这是简短的代码以及对我的问题有一个大致了解所需的一切

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,net,X,T,Xi,Ai,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    

这个帖子可以关闭了 :)

【问题讨论】:

  • 使用 trainlm 时出错(第 109 行)输入数与 net.numInputs 不匹配。网络/火车错误(第 106 行)[net,tr] = feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam);
  • 给你 :Dthan 你花时间看我的问题

标签: matlab neural-network cell


【解决方案1】:

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

尝试替换:

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

作者:

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

AND:请删除i 中的无限循环,通过添加i=i+1; 或用更自然的for 循环替换while 循环,例如

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 在循环内?我想那里缺少一些东西......

【讨论】:

  • 我知道无限循环它没有完成谢谢你让我试试你刚才说的:d
  • 请注意我的编辑 - 你没有(认真地)在循环中使用i
  • 我不能使用它,因为在“CeVrem”中我有我拥有的 3 个类的表示 [1 0 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 行)[net,tr] = feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam);
  • 考虑到一个是 4x15 而另一个是 1x15,这很奇怪:D
  • 是的,部分代码丢失了,因为我想简化它无关紧要:)) 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))) 错误 = 错误 + mse(net,cellTargets{i},y);我=我+1;最后这是我使用的地方:我做了另一个项目,但我只有 2 个类,其中 3 个不知道如何在没有单元格的情况下对它们进行编码,所以我可以使用 cvpartition
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2012-05-15
  • 2015-11-20
  • 2012-10-05
  • 2013-01-04
相关资源
最近更新 更多