【发布时间】:2014-01-27 01:56:12
【问题描述】:
我正在研究语音识别,我正在尝试在 Matlab 中使用神经网络设计一种语音识别算法。如何定义网络结构?
【问题讨论】:
标签: matlab
我正在研究语音识别,我正在尝试在 Matlab 中使用神经网络设计一种语音识别算法。如何定义网络结构?
【问题讨论】:
标签: matlab
Matlab 有一个Neural Network Toolbox。也许你可以看看那个?
【讨论】:
您的问题很笼统。您应该向我们提供有关您想要做什么的更具体的细节。
但是,根据我使用此工具箱进行车牌识别的经验,我给您一些使用 Matlab 神经网络工具箱的技巧。希望对您有所帮助。
1-您需要知道将使用多少隐藏层以及输出数量。在我的例子中,我指定了 20 个隐藏层和 9 个输出。
2-您首先需要有一个数据集。您将使用此数据集来训练您的神经网络。在 LPR 的情况下,我使用 90x50 矩阵作为我的数据集。每行代表一个数字,包含从数字图像中提取的 50 个数字。
3- 您将需要一个目标矩阵来将您的数据集映射到已知输出(因此称为训练)。
以下语法定义了提到的网络:
net = newff(minmax(datasetNormalized'),[20 9],{'logsig' 'logsig'},'traingdx');
为了训练我们编写的网络:
[net,tr]=train(net,datasetNormalized',T);
我们使用以下代码向网络提供一个新的输入:
[dummy,b]=max(sim(net,m_normalized'));
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');
【讨论】: