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)

 

 

posted on 2013-07-13 20:03  uumonkey  阅读(6107)  评论(1编辑  收藏  举报