2012-04-09 92 views
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个例子。举例来说,目标是前20个步骤的特征1。所以基本上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)); 

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

UPDATE

我注意到,我的数据集是T(1x5000)而例如数据集是T(1×100)细胞。双胞胎和细胞有什么区别?

+1

我看不出任何明显的东西。也许尝试X = data(:, 1)';并看看你是否仍然有错误? – Richante 2012-04-09 21:51:00

+0

@Richante同样的错误。我也做了'X = 1:100;'和'T = 1:100;',它与示例数据集具有相同的尺寸,并且得到相同的错误。可能是双重细胞区分? – siamii 2012-04-09 22:05:59

回答

2

我解决它通过:

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

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

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); 
0

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

这里的问题是从double到cell数组的转换。这里提到的MATLAB并没有这样做自动,因为一个单元格可以包含任何类型的值:http://www.mathworks.com/help/matlab/matlab_prog/what-is-a-cell-array.html

所以,在你的答复中提到,您可以使用num2cell(你的双阵列转换为电池阵列),或者你可以分配X和T作为单元格数组,从一开始就使用cell(),然后将您的double值复制到它们中。这种明确的类型转换是必要的,因为preparets需要单元阵列作为输入,这很像ANN包中的许多绘图函数。