1、BP神经网络是一种前馈型网络(各神经元接受前一层的输入,并输出给下一层,没有反馈),分为input层,hide层,output层
2、BP神经网络的步骤:
1)创建一个神经网络:newff
a.训练样本:归一化(premnmx ,postmnmx ,tramnmx)
b.确定节点数:输出层的节点数可直接获得
c.确定各层神经元的激活函数
常见的激活函数:purelin:线性/logsig:对数S型/tansig:正切S型
d.确定训练函数
traingd :梯度下降BP训练函数/traingdx :梯度下降自适应学习率训练函数
%Format:net = newff ( A, B, {C} ,‘trainFun’)
A:n×2的矩阵,第i行元素为输入信号xi的最小值和最大值
B:k维行向量,其元素为网络中各层节点数
C:k维字符串行向量,每一分量为对应层神经元的激活函数
trainFun :为学习规则采用的训练算法
2)学习:train
学习是一个调整权重的过程,使得通过神经网络的输出不断逼近应有的输出
网络配置参数
net.trainparam.goal:神经网络训练的目标误差
net.trainparam.show:显示中间结果的周期
net.trainparam.epochs:最大迭代次数
net.trainParam.lr:学习率
%Farmat:net=train( net, X, Y )
X:网络实际输入
Y:网络应有输出
3)仿真模拟
选择测试集X进行模拟
%Farmat:Y=sim(net,X)
3、举例
下面将举大量的例子来说明BP神经网络的应用。
1)对函数f(x)=sinx(0=<x<=pi/2)进行逼近
1 %%%使用BP神经网络逼近函数cos(x)%%% 2 clc;clear; 3 x=0:0.1:1.5;%训练样本 4 y=sin(x);%真实的输出值 5 net=newff(minmax(x),[10,1],{'logsig','logsig'});%建立bp神经网络 6 net.trainParam.show = 50; 7 net.trainParam.lr = 0.01; 8 net.trainParam.goal = 0.0001; 9 net.trainParam.epochs = 500; 10 net=train(net,x,y);%训练样本 11 testx=0.01:0.1:1.51; 12 testy=sim(net,testx);%测试 13 plot(x,y,testx,testy,'r');
2)对两种蠓虫(Af 与Apf)进行鉴别:
依据的资料是触角和翅膀的长度,已经测得了9 支Af 和6 支Apf 的数据如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),
(1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
Q:对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3 个标本加以识别。
1 clear 2 p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 3 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 4 p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00 5 1.28,2.00;1.30,1.96]; 6 p=[p1;p2]'; 7 pr=minmax(p); 8 net=newff(pr,[3,2],{'logsig','logsig'}); 9 net.trainParam.show = 10; 10 net.trainParam.lr = 0.05; 11 net.trainParam.goal = 1e-10; 12 net.trainParam.epochs = 50000; 13 net = train(net,p,goal); 14 x=[1.24 1.80;1.28 1.84;1.40 2.04]'; 15 y0=sim(net,p) 16 y=sim(net,x)