我有90×8数据集,我通过90个字符图像(即数字1-9)进行特征提取(通过将每10×10个单元格中的1个相加)。每行代表一个图像。 我正在尝试使用以下代码来训练神经网络并识别新的输入图像(包括1到9之间的数字):
net.trainFcn='traingdx';
net.performFcn='sse';
net.trainParam.goal=0.1;
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
net =newff(minmax(datasetNormalized'),[20 9],{'logsig' 'logsig'});
T=reshape(repmat([1:9],10,1),1,90);
[net,tr]=train(net,datasetNormalized,T);
之后我想使用以下内容使用经过训练的网络识别新图像。 m是一个也被提取出特征的图像字符。
[a,m]=max(sim(net,m));
disp(b);
我收到以下错误,我不知道如何解决它:
使用trainlm时出错(第109行)
输入和目标具有不同数量的样本。
网络/火车出错(第106行)[net,tr] = feval(net.trainFcn,网,X,T,僖,艾,EW,net.trainParam);
神经中的错误(第55行)[net,tr] = train(net,datasetNormalized,T);
注意:datasetNormalized是我在[0,1]中规范化的数据集。 哪个部分导致问题?
答案 0 :(得分:0)
输入和目标具有不同数量的样本。这似乎是问题
T=reshape(repmat([1:9],10,1),1,90) --> T=reshape(repmat([1:9],10,1),90,1)
[net,tr]=train(net,datasetNormalized,T); --> [net,tr]=train(net,datasetNormalized',T);
答案 1 :(得分:0)
T用作网络的目标;因此,按照朋友的建议,我将T定义为9 * 90阵列,前10列在第一行中有1个 - 其他行为零,第二列10在第二行中有1个,所以上
T=zeros(9,90);
for j=1:90
i=ceil(j/10);
T(i,j)=1;
end
[net,tr]=train(net,datasetNormalized',T);
这解决了我在训练网络上遇到的错误,虽然我还不确定它将如何映射到输入字符并确定它们。