我使用神经网络,用来实现七段编码器,7个输入,4个输出,隐含层个数为5个,如下:
P =
1 0 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1
1 1 0 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1
1 0 1 0 0 0 1 0 1 0
1 0 0 0 1 1 1 0 1 1
0 0 1 1 1 1 1 0 1 1
>> T
T =
0 0 0 0 0 0 0 0 1 1
0 0 0 0 1 1 1 1 0 0
0 0 1 1 0 0 1 1 0 0
0 1 0 1 0 1 0 1 0 1
>> net=newff([0 1],[5,4],{‘tansig’,’logsig’},’trainlm’);
>> net.trainParam.epochs=1000;
>> net.trainParam.goal=0.01;
>> LP.lr=0.1;
>> net=train(net,P,T)
输入命令,有错误,提示:
??? Error using ==> network.train at 228
Inputs are incorrectly sized for network.
Matrix must have 1 rows.
由上面的代码,可以看出,出现的问题不在于输入P和输出T的列数不一样。后面我就想,应该是newff后面的[0,1]出的问题,把代码改过,如下:
>> threshold=[0,1;0,1;0,1;0,1;0,1;0,1;0,1];
>> net=newff(threshold,[5,4],{‘tansig’,’logsig’},’trainlm’);
>> net.trainParam.epochs=1000;
>> net.trainParam.goal=0.01;
>> LP.lr=0.1;
>> net=train(net,P,T)
TRAINLM-calcjx, Epoch 0/1000, MSE 0.337452/0.01, Gradient 0.182894/1e-010
TRAINLM-calcjx, Epoch 10/1000, MSE 0.00464531/0.01, Gradient 0.0106673/1e-010
TRAINLM, Performance goal met.
“threshold”是指输入向量的最小值和最大值,这里它是7行2列,而不是10行2列。首先,P是输入向量,每列是一个样本,在这里就是10个样本,每个样本是7维,也就是说,threshold的行数是每个样本中的维数,而不是样本数。
我是这样理解的,不知道对不对,拿来向大家请教和讨论。