我有两个数据集,我从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之间有什么区别?
答案 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包中的许多绘图函数一样。