neural network - neural - El error de la función de red neuronal "El índice supera las dimensiones de la matriz"
neural network toolbox matlab download (3)
Tengo dos conjuntos de datos, que cargo desde un archivo CSV , y los divido en X y T:
X (3x5000) double
T (1x5000) double
Estoy intentando configurar esta función, pero no puedo
http://www.mathworks.co.uk/help/toolbox/nnet/ref/layrecnet.html
X tiene tres funciones y 5000 ejemplos. T tiene una característica y 5000 ejemplos. Por ejemplo, el objetivo es la característica 1 20 pasos adelante. Entonces básicamente X(1,21) == T(1)
.
[X,T] = simpleseries_dataset;
Esto funciona perfectamente, en este caso, tengo 1x100, 1x100.
Sin embargo, si uso mi propio conjunto de datos, obtengo esto:
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));
No entiendo, ¿qué estoy haciendo mal?
ACTUALIZAR
Me di cuenta de que mi conjunto de datos es T (1x5000) doble, mientras que el conjunto de datos de ejemplo es T (1x100) celular . ¿Cuál es la diferencia entre el doble y la celda?
Lo solucioné por:
X = num2cell(X);
T = num2cell(T);
No tengo ni idea de porqué; debe ser la sintaxis de MATLAB ...
Para aclarar "(...) debe ser la sintaxis de MATLAB ...":
El problema aquí es la conversión de matrices dobles a matrices. Matlab no hace esto automáticamente ya que una celda puede contener cualquier tipo de valor como se menciona aquí: http://www.mathworks.com/help/matlab/matlab_prog/what-is-a-cell-array.html
Entonces, como se menciona en su respuesta, puede convertir sus matrices dobles a matrices de celdas usando num2cell () o puede asignar X y T como matrices de celdas desde el principio utilizando cell () y luego copiando sus valores dobles en ellas. Este molde de tipo explícito es necesario porque preparaciones espera matrices de celdas como entrada, al igual que muchas de las funciones de trazado en el paquete ANN.
Puedes resolverlo por:
P = con2seq(p);
T = con2seq(t);
.....% por ejemplo
p=(1 2;3 4;5 6);
t=(3;7;11);
.....%ahora
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);