-1-BP神经网络一、例子部分1、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据:输入X输出D输入X输出D输入X输出D-1.0000-0.9602-0.30000.13360.40000.3072-0.9000-0.5770-0.2000-0.20130.50000.3960-0.8000-0.0729-0.1000-0.43440.60000.3449-0.70000.37710-0.50000.70000.1816-0.60000.64050.1000-0.39300.8000-0.3120-0.50000.66000.2000-0.16470.9000-0.2189-0.40000.46090.3000-0.09881.0000-0.3201解:看到期望输出的范围是1,1,所以利用双极性Sigmoid函数作为转移函数。程序如下:clear;clc;X=-1:0.1:1;D=[-0.9602-0.5770-0.07290.37710.64050.66000.4609...0.1336-0.2013-0.4344-0.5000-0.3930-0.1647-.0988...0.30720.39600.34490.1816-0.312-0.2189-0.3201];figure;plot(X,D,'*');%绘制原始数据分布图(附录:1-1)%net=newff(X,D,5);net=newff(minmax(X),[5,1],{'tansig','tansig'})net.trainParam.epochs=1000;%训练的最大次数net.trainParam.goal=0.005;%全局最小误差net=train(net,X,D);O=sim(net,X);figure;plot(X,D,'*',X,O);%绘制训练后得到的结果和误差曲线(附录:1-2、1-3)V=net.iw{1,1}%输入层到中间层权值theta1=net.b{1}%中间层各神经元阈值W=net.lw{2,1}%中间层到输出层权值theta2=net.b{2}%输出层各神经元阈值所得结果如下:输入层到中间层的权值:-9.16697.34487.37614.89663.5409TV中间层各神经元的阈值:6.5885-2.4019-0.99621.53033.2731T中间层到输出层的权值:0.34270.21350.2981-0.88401.9134W输出层各神经元的阈值:-1.5271T-2-2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据:输入X输出D输入X输出D输入X输出D00448211539322621043371解:看到期望输出的范围超出1,1,所以输出层神经元利用线性函数作为转移函数。程序如下:clear;clc;X=[012345678910];D=[01234321234];figure;plot(X,D,'*');%绘制原始数据分布图(附录:2-1)%net=newff(X,D,5);%net=newff(minmax(X),[51],{'tansig','purelin'})net.trainParam.epochs=1000;net.trainParam.goal=0.005;net=train(net,X,D);O=sim(net,X);figure;plot(X,D,'*',X,O);%绘制训练后得到的结果和误差曲线(附录:2-2、2-3)V=net.iw{1,1}%输入层到中间层权值theta1=net.b{1}%中间层各神经元阈值W=net.lw{2,1}%中间层到输出层权值theta2=net.b{2}%输出层各神经元阈值所得结果如下:输入层到中间层的权值:0.85842.0890-1.21660.2752-0.3910TV中间层各神经元的阈值:-14.0302-9.83407.4331-2.01350.5610T中间层到输出层的权值:-0.4675-1.12342.32084.6402-2.2686W输出层各神经元的阈值:1.7623T3、以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个三层BP神经网络,利用该组信号的6个过去值预测信号的将来值。日期价格日期价格2009/02/022011.6822009/03/022093.452-3-2009/02/032060.8122009/03/032071.4322009/02/042107.7512009/03/042198.1122009/02/052098.0212009/03/052221.0822009/02/062181.2412009/03/062193.0122009/02/092224.7112009/03/092118.7522009/02/102265.1612009/03/102158.5722009/02/112260.8222009/03/112139.0212009/02/122248.0922009/03/122133.8812009/02/132320.7922009/03/132128.8512009/02/162389.3922009/03/162153.2912009/02/172319.4422009/03/172218.3312009/02/182209.8622009/03/182223.7312009/02/192227.1322009/03/192265.7612009/02/202261.4822009/03/202281.0912009/02/232305.7822009/03/232325.4812009/02/242200.6522009/03/242338.4212009/02/252206.5722009/03/252291.5512009/02/262121.2522009/03/262361.7012009/02/272082.8522009/03/272374.44解:clear;clc;D1=[2011.6822060.8122107.7512098.0212181.2412224.711...2265.1612260.8222248.0922320.7922389.3922319.442...2209.8622227.1322261.4822305.7822200.6522206.572...2121.2522082.8522093.4522071.4322198.1122221.082...2193.0122118.7522158.5722139.0212133.8812128.851...2153.2912218.3312223.7312265.7612281.0912325.481...2338.4212291.5512361.7012374.44];D=premnmx(D1)%数据归一化把数据化到[-1,1]范围内Q=length(D);count=1:1:Q;X=zeros(6,0);X(1,2:Q)=D(1,1:(Q-1));X(2,3:Q)=D(1,1:(Q-2));X(3,4:Q)=D(1,1:(Q-3));X(4,5:Q)=D(1,1:(Q-4));X(5,6:Q)=D(1,1:(Q-5));X(6,7:Q)=D(1,1:(Q-6));figure;plot(count,D,count,D,'*');%绘制原始数据分布图(附录:3-1)%net=newff(X,D,7)net=newff(minmax(X),[71],{'tansig','tansig'})net.trainParam.epochs=1000;-4-net.trainParam.goal=0.005;net=train(net,X,D);O=sim(net,X);figure;plot(count,D,'*',count,O,'r');%绘制训练后得到的结果和误差曲线(附录:3-2、3-3)V=net.iw{1,1}%输入层到中间层权值theta1=net.b{1}%中间层各神经元阈值W=net.lw{2,1}%中间层到输出层权值theta2=net.b{2}%输出层各神经元阈值所得结果如下:输入层到中间层的权值:-2.4916-3.00980.43811.15980.6343-0.3355-0.08990.68491.29690.27820.93121.2349-0.2707-1.72260.94451.7617-0.21671.27912.11460.951V4-0.83880.22140.1251-0.6276-0.1086-0.7422-0.1918-0.43111.58000.45320.65191.97480.2787-0.78190.7238-0.08840.0084-0.7738-2.1268-1.0499-2.1740-1.6249中间层各神经元的阈值:2.67171.9258-0.0286-1.2134-1.06570.89081.6032T中间层到输出层的权值:2.66281.0361-1.41602.2844-0.3706-1.4939-1.4575W输出层各神经元的阈值:-0.5480T-5-附录:图1-1原始数据的分布图1-2训练后得到的结果-6-图1-3误差曲线图2-1原始数据的分布-7-图2-2训练后得到的结果图2-3误差曲线-8-图3-1原始数据的分布图3-2训练后得到的结果-9-图3-3误差曲线二、理论部分1、BP神经网络的定义利用误差反向传播(ErrorBackPropagation)算法进行训练的单纯的前馈型人工神经网络称为BP神经网络。2、BP神经网络模型2.1、拓扑结构网络输入:12X=Tnxxx从外界向网络网络输出:-10-12TmYyyy中间层的输出12O=Tlooo实际输出12TlDddd期望输出网络权值12W=l12=1,2TkkkmkWkl12V=mVVV输入层到中间层的权值矩阵nmV12=1,2TjjjnjVvvvjm网络阈值1,2,kTkl输出层神经元1,2,jjm输出层神经元2.2、转移函数中间层:11,2njjijijiyfnetfvxjm输出层:1111=1,2mmkkjkjkjkjkjjmnjkijijkjiofnetfyTffnetTffvxTkl11netfnete(或者11netnetefnete)'1fnetfnetfnet从拓扑结构图可以看出,BP神经网络可以看成一个非线性函数,网络输入值和预测值分别为该函数的自变量和因变量。当输入结点数为n,输出结点数为l时,BP网络就表达了从n个自变量到m个自变量的函数映射关系。2.3、学习规则(误差反向传播算法)信号由输入层输入网络经中间层处理由输出层输出并利用期望输出和实际输出之间的误差对网络的权值和阈值由后向前逐层进行校正。-11-输入一样本后期望输出与实际输出的误差:2211122lkkkEDOdo221111122llmkkkjkjkkkjdfnetdfyT22111111122lmlmnkjkjkkjkijijkkjkjidffnetTdffvxTE为权值jk、ijv和阈值kT、j的函数。权值和阈值调整的方向为其负梯度的方向