2014-01-17 103 views
0

我有一個90×8的數據集,我從90個字符的圖像,即數字1-9特徵提取(通過在每10×10單元中求和1)。每一行代表一幅圖像。 我嘗試使用下面的代碼來訓練神經網絡識別新的輸入圖像(即在1到9(含)之間的數字):MATLAB NN工具箱:錯誤使用trainlm

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)

輸入和目標均有不同數量的樣本。 (net.train)= feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam); (行55)[net,tr] = train(net,datasetNormalized,T);

注意:datasetNormalized是我在[0,1]中歸一化的數據集。 哪一部分導致問題?

回答

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

問題依然存在 – JasonStack

+0

究竟應該爲網絡輸入一個輸出?這太複雜了,我很困惑! – JasonStack

+0

錯誤信息是什麼?你能告訴我們T的大小和數據集的規格化嗎? – michaeltang

0

T將被用作網絡的目標;因此,根據朋友的建議,我將T定義爲一個9 * 90的數組,其前10列的第一行有1個,其他行爲0,第二行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); 

這解決了在網絡訓練,我得到的錯誤,但我仍然不相信這是怎麼回事映射到輸入的字符,並確定他們。