简单易学的机器学习算法——神经网络之BP神经网络

一、BP神经网络的观点

    BP神经网络是一种多层的前馈神经网络,其次要少许是:征象正向传动装置。,过失是反向传动装置。。具体来说,大约如次的只含独一隐层的神经网络模仿:

(三层BP神经网络模仿)

BP神经网络的快跑次要分为两个阶段,第一阶段是征象的正向传动装置。,从输入层到遮蔽层,最近的,输入层范围。;第二阶段是过失的反向传动装置。,从输入层到隐含层,最近的输入层,隐层到输入层的分量和歪曲次调解。,输入层对遮蔽层的分量和偏移。

二、BP神经网络的过程

    在已收到BP神经网络的少许后,本人需求由于征象的前向传动装置来构造完全网络。。

1、网络的设定初值

2、隐含层输入

3、输入层输入

4、过失的计算

    本人把过失规定的作为:

5、权值补充

    权值补充规定的为:

在喂,本人需求解说规定的的来源。:

分量的补充规定的:

流行

分量的补充规定的:

6、偏移补充

    偏移补充规定的为:

则偏移补充规定的为:

流行

则偏移补充规定的为:

7、决定算法迭代倘若完毕。

    有很多办法来决定算法倘若收敛。,具有布置迭代的公共代数,断定两个附加过失暗中的差值倘若没有。

三、试验仿照

    在这人试验中,本人使用BP神经网络处置独一四归类成绩,终极归类导致为:

MATLAB指定遗传密码

主程序

%% BP的次要功能

% 清空
clear all;
clc;

% 导入录音
load data;

从1到2000随机排序
k=rand(1,2000);
[m,n]=sort(k);

%输入输入录音
input=data(:,2:25);
output1 =data(:,1);

从1个维度到4个维度的输入转变
for i=1:2000
    switch output1(i)
        case 1
            输入(I),:)=[1 0 0 0];
        case 2
            输入(I),:)=[0 1 0 0];
        case 3
            输入(I),:)=[0 0 1 0];
        case 4
            输入(I),:)=[0 0 0 1];
    end
end

随机提取1500份范本作为锻炼范本。,500个范本是预测范本。
trainCharacter=input(n(1:1600),:);
trainOutput=output(n(1:1600),:);
testCharacter=input(n(1601:2000),:);
testOutput=output(n(1601:2000),:);

% 说明书耕作少许
[trainInput,inputps]=mapminmax(trainCharacter'');

%% 限制因素的设定初值

% 限制因素的设定初值
inputNum = 24、输入层的装满数%
hiddenNum = 50;遮蔽层装满%
outputNum = 4,输入层装满

% 分量和歪曲的设定初值
w1 = rands(inputNum,hiddenNum);
b1 = rands(hiddenNum,1);
w2 = rands(hiddenNum,outputNum);
b2 = rands(outputNum,1);

% 仿真率
yita = 0.1;

%% 网络的锻炼
for r = 1:30
    E(r) = 0;% 数数过失
    for m = 1:1600
        % 消息的正向流淌
        x = trainInput(:,m);
        % 隐含层输入
        for j = 1:hiddenNum
            遮蔽的(J),:) = w1(:,j)''*x+b1(j,:);
            hiddenOutput(j,:) = g(遮蔽的(J),:));
        end
        % 输入层输入
        outputOutput = w2''*hiddenOutput+b2;
        
        % 计算过失
        e = trainOutput(m,:)''-outputOutput;
        E(r) = E(r) + 和(ABS(E))
        
        % 现代化分量和偏倚
        % 从隐含层到输入层的分量和歪曲调解
        dw2 = hiddenOutput*e'';
        db2 = e;
        
        % 输入层对遮蔽层的分量和偏移调解
        for j = 1:hiddenNum
            partOne(j) = hiddenOutput(j)*(1-hiddenOutput(j));
            partTwo(j) = w2(j,:)*e;
        end
        
        for i = 1:inputNum
            for j = 1:hiddenNum
                dw1(i,j) = partOne(j)*x(i,:)*partTwo(j);
                db1(j,:) = partOne(j)*partTwo(j);
            end
        end
        
        w1 = w1 + yita*dw1;
        w2 = w2 + yita*dw2;
        b1 = b1 + yita*db1;
        b2 = b2 + yita*db2;  
    end
end

%% 语音特点征象归类
testInput=mapminmax(''apply'',testCharacter'',inputps);

for m = 1:400
    for j = 1:hiddenNum
        hiddenTest(j,:) = w1(:,j)''*testInput(:,m)+b1(j,:);
        hiddenTestOutput(j,:) = g(hiddenTest(j,:));
    end
    outputOfTest(:,m) = w2''*hiddenTestOutput+b2;
end

%% 导致剖析
%基础网络输入找出录音属于哪类
for m=1:400
    output_fore(m)=find(outputOfTest(:,m)=max(输入测量法),m)));
end

BP网络预测过失
error=output_fore-output1(n(1601:2000))'';

k=zeros(1,4);  
找出断定毛病属于哪个类别。
for i=1:400
    if error(i)~=0
        [b,Cmax=max(测量法输入(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:400
    [b,Cmax=max(测量法输入(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

使活动职务

%% 使活动职务
function [ y ] = g( x )
    y = 1./(1+exp(-x));
end

发表评论

电子邮件地址不会被公开。 必填项已用*标注