“索引超出矩阵尺寸”神经网络功能错误

时间:2012-04-09 21:24:14

标签: neural-network matlab

我有两个数据集,我从CSV文件加载,然后将它们拆分为X和T:

X (3x5000) double
T (1x5000) double

我正在尝试配置此功能,但我不能

http://www.mathworks.co.uk/help/toolbox/nnet/ref/layrecnet.html

X有三个功能和5000个例子。 T有一个功能和5000个例子。例如,目标是特征1 20步。所以基本上X(1,21) == T(1)

[X,T] = simpleseries_dataset;

这非常有效,在这种情况下,我有1x100,1x100。

但是,如果我使用自己的数据集,我会得到这个:

X = data(:,1:3)';
T = data(:,4)';
net = layrecnet(1:2,10);
[Xs,Xi,Ai,Ts] = preparets(net,X,T);

??? Index exceeds matrix dimensions.

Error in ==> preparets at 273
  ti = tt(:,FBS+((1-net.numLayerDelays):0));

我不明白,我做错了什么?

更新

我注意到我的数据集是T(1x5000) double ,而示例数据集是T(1x100) cell 。 double和cell之间有什么区别?

3 个答案:

答案 0 :(得分:2)

我解决了它:

X = num2cell(X);
T = num2cell(T);

我不知道为什么;它必须是MATLAB语法......

答案 1 :(得分:0)

您可以通过以下方式解决:

  P = con2seq(p);
   T = con2seq(t);

.....%例如

p=(1 2;3 4;5 6);
t=(3;7;11);

.....%立即

P = con2seq(p);
T = con2seq(t);
net = elmannet(1:2,12);
[Xs,Xi,Ai,Ts] = preparets(net,P,T);
net = train(net,Xs,Ts,Xi,Ai);
view(net)
Y = net(Xs,Xi,Ai);
perf = perform(net,Ts,Y);

答案 2 :(得分:0)

澄清“(...)它必须是MATLAB语法......”:

这里的问题是从double到cell数组的转换。 Matlab不会自动执行此操作,因为单元格可以包含此处提到的任何类型的值:http://www.mathworks.com/help/matlab/matlab_prog/what-is-a-cell-array.html

所以,正如你的答案中提到的,你可以使用num2cell()将双数组转换为单元格数组,或者你可以使用cell()从一开始就将X和T分配为单元格数组,然后将双值复制到他们。这种显式类型转换是必要的,因为preparets期望单元格数组作为输入,就像ANN包中的许多绘图函数一样。