2012-04-09 90 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包中的許多繪圖函數。