Halcom 发表于 2017-3-26 13:06:45

基于多隐藏层的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]
查看完整版本: 基于多隐藏层的BP神经网络