基于多隐藏层的BP神经网络
基于多隐藏层的BP神经网络:主要结构如下:% 多隐藏层net=newff(inputn,output_train,,{'logsig','tansig'},'trainlm');
主要代码如下:
%% 该代码为基于多隐藏层的BP网络的语言识别
%% 清空环境变量
clc,clear,close all
warning off
format shortG
% 训练数据预测数据提取及归一化
%下载四类语音信号
load data1 c1
load data2 c2
load data3 c3
load data4 c4
%四个特征信号矩阵合成一个矩阵
data(1:500,:)=c1(1:500,:);
data(501:1000,:)=c2(1:500,:);
data(1001:1500,:)=c3(1:500,:);
data(1501:2000,:)=c4(1:500,:);
%从1到2000间随机排序
k=rand(1,2000);
=sort(k);
%输入输出数据
input=data(:,2:25);
output1 =data(:,1);
%把输出从1维变成4维
output=zeros(2000,4);
for i=1:2000
switch output1(i)
case 1
output(i,:)=;
case 2
output(i,:)=;
case 3
output(i,:)=;
case 4
output(i,:)=;
end
end
%随机提取1500个样本为训练样本,500个样本为预测样本
input_train=input(n(1:1500),:)';
output_train=output(n(1:1500),:)';
input_test=input(n(1501:2000),:)';
output_test=output(n(1501:2000),:)';
%输入数据归一化
=mapminmax(input_train);
%% 网络结构初始化
innum=24;
midnum=25;
outnum=4;
%初始化网络结构
nntwarn off
% 多隐藏层
net=newff(inputn,output_train,,{'logsig','tansig'},'trainlm');
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004;
% 网络训练
net=train(net,inputn,output_train);
% BP网络预测
% 训练样本--预测输出
yc_train = sim(net,inputn);
% 测试样本--预测输出
inputn_test=mapminmax('apply',input_test,inputps);
yc_test = sim(net,inputn_test);
%% 结果分析
% 根据网络输出找出数据属于哪类
% 训练样本
output_train_yc=zeros(1,1500);
for i=1:1500
output_train_yc(i)=find(yc_train(:,i)==max(yc_train(:,i)));
end
% 训练样本预测误差
error_train = output_train_yc - output1(n(1:1500))';
= find(error_train==0);
disp(['训练样本预测正确率为:', num2str( length(eTb)/length(error_train) )])
% 测试样本
output_test_yc=zeros(1,500);
for i=1:500
output_test_yc(i)=find(yc_test(:,i)==max(yc_test(:,i)));
end
% 测试样本预测误差
error_test = output_test_yc - output1(n(1501:2000))';
% 画出预测语音种类和实际语音种类的分类图
figure(1)
plot(output_test_yc,'r')
hold on
plot(output1(n(1501:2000))','b')
legend('预测语音类别','实际语音类别')
hold off
% 画出误差图
figure(2)
plot(error_test)
title('BP网络分类误差','fontsize',12)
xlabel('语音信号','fontsize',12)
ylabel('分类误差','fontsize',12)
% 找出判断错误的分类属于哪一类
k=zeros(1,4);
for i=1:500
if error_test(i)~=0
=max(output_test(:,i));
switch c
case 1
k(1)=k(1)+1;
case 2
k(2)=k(2)+1;
case 3
k(3)=k(3)+1;
case 4
k(4)=k(4)+1;
end
end
end
% 找出每类的个体和
kk=zeros(1,4);
for i=1:500
=max(output_test(:,i));
switch c
case 1
kk(1)=kk(1)+1;
case 2
kk(2)=kk(2)+1;
case 3
kk(3)=kk(3)+1;
case 4
kk(4)=kk(4)+1;
end
end
% 正确率
rightridio=(kk-k)./kk;
disp('测试样本4类预测正确率分别为:')
disp(rightridio);
页:
[1]