2010-10-01 95 views
0

我正在做語音識別研究,我正試圖設計一個在Matlab中使用神經網絡進行語音識別的算法。我怎樣才能定義我的網絡結構?matlab中的神經網絡設計

回答

1

Matlab有一個Neural Network Toolbox。也許你可以看看那個?

+0

IM使用toolbox..but有任何任何選項來定義輸入並手動輸出層神經元。 – Ankita 2010-10-02 12:54:03

+0

自從我使用這個工具箱已經有相當長的時間了,但我可以記住這樣的事情是可能的。不幸的是,我不記得如何...... – 2010-10-02 22:14:08

0

你的問題非常一般。你應該給我們更多關於你想要做什麼的具體細節。 但是,我給你提供了一些有關使用Matlab神經網絡工具箱的一些提示,這些提示與我使用此工具箱的牌照識別的經驗不同。希望能幫助到你。
1-您需要知道您將使用多少隱藏層以及您的輸出數量。在我的情況下,我指定了20個隱藏層和9個輸出。
2-您需要首先創建數據集。你將使用這個數據集來訓練你的神經網絡。在LPR的情況下,我使用了一個90x50矩陣作爲我的數據集。每行都代表一個數字,從數字圖像中提取50個數字。
3-您需要一個目標矩陣來將您的數據集映射到已知輸出(因此稱爲訓練)。
下面的語法定義中提到的網絡:

net = newff(minmax(datasetNormalized'),[20 9],{'logsig' 'logsig'},'traingdx'); 

培訓網絡,我們寫:

[dummy,b]=max(sim(net,m_normalized')); 

[net,tr]=train(net,datasetNormalized',T); 

我們使用下面的代碼給出一個新的輸入到網絡

b是我們在這裏尋找的答案(輸出的概率最大),因此我們顯示它用戶:

msgbox(['digit is: ' num2str(b)],'Digit recognized','help'); 

這是一個完整的源代碼,如果你想知道什麼我的代碼做什麼:

clc 
clear 
close all 

numOfPhotos=90; 
imgRows=100; 
imgCols=50; 

X=zeros(numOfPhotos,(imgRows*imgCols)/100); 




%%Resize Images 
% myresize(imgRows,imgCols); 


%read train images 
datasetIndex=0;  

for i=1:numOfPhotos/10 
    for j=1:numOfPhotos/9   
     datasetIndex=datasetIndex+1; 
    im=imread(['resized_train_numbers\' num2str(i) ' (' num2str(j) ').jpg']); 
    im=im2bw(im,graythresh(im));  

    c=1; 
    for g=1:imgRows/10 
     for e=1:imgCols/10 
      s=sum(sum(im((g*10-9:g*10),(e*10-9:e*10)))); 
      X(datasetIndex,c)=s; 
      c=c+1;    
     end  
    end 

    end 
end 
datasetNormalized=zeros(numOfPhotos,imgRows*imgCols/100); 
%%Normalize dataset contents 
minDataset=min(min(X)); 
maxDataset=max(max(X)); 
for i = 1:numOfPhotos 
    for j=1:imgRows*imgCols/100 
     datasetNormalized(i, j) = (X(i,j)-minDataset)/(maxDataset-minDataset); 
    end 
end 




% 
%%Neural network part 


% T=zeros(1,90); 
% for i=1:90 
%  T(i)=ceil(i/10); 
% end 

T=zeros(9,90); 
for j=1:90 
    i=ceil(j/10); 
    T(i,j)=1; 
end 

% net=newff(datasetNormalized',T,20); 
net = newff(minmax(datasetNormalized'),[20 9],{'logsig' 'logsig'},'traingdx'); 

net.performFcn='sse'; 
net.trainParam.goal=0.01; 
net.trainParam.show=20; 
net.trainParam.epochs=100; 
net.trainParam.mc=0.95; 
% net.trainFcn='trainlm'; 
net.trainParam.min_grad=1e-12; 
[net,tr]=train(net,datasetNormalized',T); 




%Read input image for recognition 
[name file]=uigetfile('*.jpg','Choose Plate Digit Image'); 
newImg=imread([file name]); 
newImg=imresize(newImg,[imgRows imgCols]); 
newImg=im2bw(newImg,graythresh(newImg)); 
figure,imshow(newImg); 

m=zeros(1,imgRows*imgCols/100); 
c=1; 
for g=1:imgRows/10 
     for e=1:imgCols/10 
      s=sum(sum(newImg((g*10-9:g*10),(e*10-9:e*10)))); 
      m(c)=s; 
      c=c+1;    
     end 
end 
%Normalize m contents 

m_normalized=zeros(1,imgRows*imgCols/100); 
for i=1:imgRows*imgCols/100  
     m_normalized(i)=(m(i)-min(m))/(max(m)-min(m)); 
end 


[dummy,b]=max(sim(net,m_normalized')); 
% b=round(sim(net,m_normalized')); 
msgbox(['digit is: ' num2str(b)],'Digit recognized','help');