烨枫_邱 https://www.jianshu.com/p/6ab6f53874f7
BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。
具体来说,对于如下的只含一个隐层的神经网络模型:BP神经网络的过程主要分为两个阶段,
第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;
第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
正向传递
BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。S函数有单极性S型函数和双极性S型函数两种,单极性S型函数定义如下:f(x)=1/1+e−x
一个例子
神经网络的代价函数与逻辑回归代价函数对比
误差的反向传递
整个编程流程
随机初始化:
如果学习率和特征变量初始化都一样的话,会导致隐含层的神经元数值一样,从而导致学习不成功,所以才有随机初始化的方法,从而避免了所有变量相同的问题
按照点的坐标分类
P1=[1 10 8 7 8 5 0 5 7 5 2 6 7 8 6 4 2 7 3 2 7 8 2 6;
7 8 6 4 2 7 3 2 7 8 2 6 1 10 8 7 8 5 0 5 7 5 1 7 ;
];%学习的数据库的点坐标
T1=[1 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0;
];%对应数据库点的分类情况
[p1,minp,maxp,t1,mint,maxt]=premnmx(P1,T1);%按行进行归一化
%创建网络
net=newff(minmax(P1),[3,1],{'logsig','purelin'},'trainlm');%purelin
%设置训练次数
net.trainParam.epochs = 10000;
%设置收敛误差
net.trainParam.goal=0.0000001;
% 学习速率
net.trainParam.lr=0.001;
%训练网络
[net,tr]=train(net,p1,t1);
%输入检测数据
%a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
a1=[4,6,4,7;3,4,6,6];
%将输入数据归一化
a=premnmx(a);
%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据
c=postmnmx(b,mint,maxt);
c
color=['or';'ob';'*r';'*b'];%红色和蓝色
for i = 1:size(P1,2)
b=T1(1,i)+1;
plot(P1(1,i),P1(2,i),color(b,:));%显示学习的数据库内的点
hold on;
end
for i = 1:size(a1,2)
b=round(c(1,i))+3;
plot(a1(1,i),a1(2,i),color(b,:));%显示检测的数据的点
hold on;
end
原点是学习的数据,星号是检测的点数据,颜色是分类情况