2

我有两个数据集,我从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。双胞胎和细胞有什么区别?

4

3 回答 3

2

我通过以下方式解决了它:

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

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

于 2012-04-09T22:16:00.300 回答
0

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

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

因此,正如您在回答中提到的,您可以使用 num2cell() 将双精度数组转换为元胞数组,也可以使用 cell() 从一开始就将 X 和 T 分配为元胞数组,然后将双精度值复制到其中。这种显式类型转换是必要的,因为preparets 期望元胞数组作为输入,就像ANN 包中的许多绘图函数一样。

于 2015-04-27T13:37:35.840 回答
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);
于 2013-04-20T19:58:54.690 回答