BP神经网络实现函数逼近python实现

合集下载

BP神经网络逼近非线性函数

BP神经网络逼近非线性函数

3、 试用BP 神经网络逼近非线性函数f(u) =)5.0u (9.1e+-sin(10u) 其中,u ∈[-0.5,0.5](1)解题步骤:①网络建立:使用“net=newff(minmax(x), [20, 1], {'tansig ’,’ purelin' });,语句建立个前馈BP 神经网络。

该BP 神经网络只含个隐含层,且神经元的个数为20。

隐含层和输出层神经元的传递函数分别为tansig 和pure-lin 。

其他参数默认。

②网络训练:使用“net=train (net, x , y) ;”语句训练建立好的BP 神经网络。

当然在网络训练之前必须设置好训练参数。

如设定训练时间为50个单位时间,训练目标的误差小于0.01,用“net.trainParam.epochs=50; net.train-Param.goal=0.01;”,语句实现。

其他参数默认。

③网络仿真:使用“y1=sim(net, x); y2=sim(net, x};”语句仿真训练前后的BP 神经网络。

(2)程序如下:clear all ;x=[-0.5:0.01:0.5];y=exp(-1.9*(0.5+x)).*sin(10*x);net=newff(minmax(x),[20,1],{'tansig' 'purelin'});y1=sim(net,x); %未训练网络的仿真结果 net.trainParam.epochs=50;net.trainParam.goal=0.01;net=train(net,x,y);y2=sim(net,x); %训练后网络的仿真结果 figure;plot(x,y,'-',x,y1,'-',x,y2,'--')title('原函数与网络训练前后的仿真结果比较');xlabel('x');ylabel('y');legend('y','y1','y2');grid on(3)仿真结果如图:图1图1为原函数y与网络训练前后(y1,y2)的仿真结果比较图。

BP算法代码实现

BP算法代码实现

BP算法代码实现BP算法(Backpropagation Algorithm)是一种常用的神经网络训练算法,它主要用于监督式学习任务中的模型训练。

BP算法的核心思想是通过反向传播来更新神经网络的权重和偏差,以使得神经网络的输出逼近目标输出。

在反向传播的过程中,通过求解梯度来更新每个连接权重和偏置的值,从而最小化损失函数。

以下是BP算法的代码实现示例:```pythonimport numpy as npclass NeuralNetwork:def __init__(self, layers):yers = layersself.weights = []self.biases = []self.activations = []#初始化权重和偏置for i in range(1, len(layers)):self.weights.append(np.random.randn(layers[i], layers[i-1])) self.biases.append(np.random.randn(layers[i]))def sigmoid(self, z):return 1 / (1 + np.exp(-z))def sigmoid_derivative(self, z):return self.sigmoid(z) * (1 - self.sigmoid(z))def forward_propagate(self, X):self.activations = []activation = X#前向传播计算每一层的激活值for w, b in zip(self.weights, self.biases):z = np.dot(w, activation) + bactivation = self.sigmoid(z)self.activations.append(activation)return activationdef backward_propagate(self, X, y, output):deltas = [None] * len(yers)deltas[-1] = output - y#反向传播计算每一层的误差(梯度)for i in reversed(range(len(yers)-1)):delta = np.dot(self.weights[i].T, deltas[i+1]) * self.sigmoid_derivative(self.activations[i])deltas[i] = delta#更新权重和偏置for i in range(len(yers)-1):self.weights[i] -= 0.1 * np.dot(deltas[i+1],self.activations[i].T)self.biases[i] -= 0.1 * np.sum(deltas[i+1], axis=1)def train(self, X, y, epochs):for epoch in range(epochs):output = self.forward_propagate(X)self.backward_propagate(X, y, output)def predict(self, X):output = self.forward_propagate(X)return np.round(output)```上述代码使用numpy实现了一个简单的多层神经网络,支持任意层数和任意神经元个数的构建。

(采用BP神经网络完成非线性函数的逼近)神经网络

(采用BP神经网络完成非线性函数的逼近)神经网络

控制系统仿真与模型处理设计报告(采用BP神经网络完成非线性函数的逼近)1、题目要求:(1)确定一种神经网络、网络结构参数和学习算法。

(2)选择适当的训练样本和检验样本,给出选取方法。

(3)训练网络使学习目标误差函数达到0.01,写出学习结束后的网络各参数,并绘制学习之前、第100次学习和学习结束后各期望输出曲线、实际输出曲线。

绘制网络训练过程的目标误差函数曲线。

(4)验证网络的泛化能力,给出网络的泛化误差。

绘制网络检验样本的期望输出曲线和网络输出曲线。

(5)分别改变神经网络的中间节点个数、改变网络的层数、改变学习算法进行比较实验,讨论系统的逼近情况,给出你自己的结论和看法。

2、设计方案:在MATLAB中建立M文件下输入如下命令:x=[0:0.01:1];y=2.2*power(x-0.25,2)+sin(5*pi*x);plot(x,y)xlabel('x');ylabel('y');title('非线性函数');得到如下图形,即所给的非线性函数曲线图:构造一个1-7-1的BP神经网络,第一层为输入层,节点个数为1;第二层为隐层,节点个数为7;变换函数选正切s型函数(tansig);第三层为输出层,节点个数为1,输出层神经元传递函数为purelin函数。

并且选Levenberg-Marquardt算法(trainlm)为BP网络的学习算法。

对于该初始网络,我们选用sim()函数观察网络输出。

继续在M函数中如下输入。

net=newff(minmax(x),[1,7,1],{'tansig','tansig','purelin'},'trainlm'); y1=sim(net,x);figure;plot(x,y,'b',x,y1,'r')title('期望输出与实际输出比较');xlabel('t');则得到以下所示训练的BP网络期望输出与实际输出曲线比较:应用函数train()对网络进行训练之前,需要预先设置训练参数。

神经网络在函数逼近中的应用

神经网络在函数逼近中的应用

二 基于BP神经网络逼近函数 基于BP神经网络逼近函数
步骤1:假设频率参数k=1,绘制要逼近的非线性 步骤1:假设频率参数k=1,绘制要逼近的非线性 函数的曲线。函数的曲线如图1 函数的曲线。函数的曲线如图1所示 k=1; p=[p=[-1:.05:8]; t=1+sin(k*pi/4*p); plot( plot(p,t,'-'); '); title('要逼近的非线性函数'); title('要逼近的非线性函数'); xlabel('时间'); xlabel('时间'); ylabel('非线性函数'); ylabel('非线性函数');
图3 训练过程 从以上结果可以看出,网络训练速度很快,很 快就达到了要求的精度0.001。 快就达到了要求的精度0.001。
步骤4 步骤4: 网络测试 对于训练好的网络进行仿真: y2=sim(net,p); figure; plot(p,t,'plot(p,t,'-',p,y1,':',p,y2, '--') '--') title('训练后网络的输出结果'); title('训练后网络的输出结果'); xlabel('时间'); xlabel('时间'); ylabel('仿真输出'); ylabel('仿真输出'); 绘制网络输出曲线,并与原始非线性函数曲线以 及未训练网络的输出结果曲线相比较,比较出来 的结果如图4 的结果如图4所示。
BP网络在函数逼近中的应用 BP网络在函数逼近中的应用

用BP网络逼近非线性函数f(x)=sin2x+cos5x

用BP网络逼近非线性函数f(x)=sin2x+cos5x

智能技术实验三-BP程序的算法设计1熟悉BP网络的基本训练算法程序,练习课件上的相关程序。

(1)用BP网络逼近非线性函数f(x)=sin2x+cos5x程序:x=-0.8:0.05:0.75;t=sin(2*x)+cos(5*x);net=newff(minmax(x),[12,1],{'tansig','purelin'},'trainbfg','learngdm','sse');%利用准牛顿反向传播算法对网络进行训练,动量梯度下降权值与阈值的学习net.trainParam.epochs=1500;%训练步数net.trainParam.goal=0;%训练目标误差net.trainParam.lr=1.42;%学习速率net.trainParam.show=100;%现实训练结果的间隔步数[net,Tr]=train(net,x,t);x1=-0.77:0.05:0.78;y1=sim(net,x1);x2=0.75:0.05:0.95;%外推t2=sin(2*x2)+cos(5*x2);y2=sim(net,x2);e=y2-t2;xwc=e./t2;%相对误差figure(2)subplot(211)plot(x,t,'ko',x,t,'k-',x1,y1,'k*',x1,y1,'k-');xlabel('自变量x')ylabel('函数值')subplot(212)plot(x2,e,'k.',x2,e,'k-')xlabel('自变量x')ylabel('函数误差值e')运行结果:(2)BP 网络在故障诊断中的应用 程序:P=[0.2286 0.1292 0.0720 0.1592 0.1335 0.0733 0.1159 0.0940 0.0522 0.1345 0.0090 0.1260 0.3619 0.0690 0.1828; 0.2090 0.0947 0.1393 0.1387 0.2558 0.0900 0.0771 0.0882 0.0393 0.1430 0.0126 0.1670 0.2450 0.0508 0.1328; 0.0442 0.0880 0.1147 0.0563 0.3347 0.1150 0.1453 0.0429 0.1818 0.0378 0.0092 0.2251 0.1516 0.0858 0.0670;0.2603 0.1715 0.0702 0.2711 0.1491 0.1330 0.0968 0.1911 0.2545 0.0871 0.0060 0.1793 0.1002 0.0789 0.0909; 0.3690 0.2222 0.0562 0.5157 0.1872 0.1614 0.1425 0.1506 0.1310 0.0500 0.0078 0.0348 0.0451 0.0707 0.0880; 0.0359 0.1149 0.1230 0.5460 0.1977 0.1248 0.0624 0.0832 0.1640 0.1002 0.0059 0.1503 0.1837 0.1295 0.0700;自变量x函数值0.750.80.850.90.95自变量x函数误差值e0.1759 0.2347 0.1829 0.1811 0.2922 0.0655 0.0774 0.2273 0.2056 0.0925 0.0078 0.1852 0.3501 0.1680 0.2668;0.0724 0.1909 0.1340 0.2409 0.2842 0.0450 0.0824 0.1064 0.1909 0.1586 0.0116 0.1698 0.3644 0.2718 0.2494;0.2634 0.2258 0.1165 0.1154 0.1074 0.0657 0.0610 0.2623 0.2588 0.1155 0.0050 0.0978 0.1511 0.2273 0.3220]';T=[1 0 0;1 0 0;1 0 0;0 1 0;0 1 0;0 1 0;0 0 1;0 0 1;0 0 1]';%输入向量的最大值与最小值threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];net=newff(threshold,[31,3],{'tansig','l ogsig'},'trainlm');%训练次数为50,训练目标为0.001,学习速率为0.1net.trainParam.epochs=50;net.trainParam.goal=0.001;LP.lr=0.1;net=train(net,P,T);%测试数据test=[0.2593 0.1800 0.0711 0.2801 0.1501 0.1298 0.1001 0.1891 0.2531 0.0875 0.0058 0.1803 0.0992 0.0802 0.1002;0.2101 0.0950 0.1298 0.1359 0.2601 0.1001 0.0753 0.0890 0.0389 0.1451 0.0128 0.1590 0.2452 0.0512 0.1319;0.2599 0.2235 0.1201 0.1171 0.1102 0.0683 0.0621 0.2597 0.2602 0.1167 0.0048 0.1002 0.1521 0.2281 0.3205]';y=sim(net,test)运行结果:y =0.0160 0.9789 0.01010.9600 0.0234 0.03920.0161 0.0044 0.9701(3)BP网络在模式识别中的应用程序:%BP网络用血清胆固醇含量检测%prestd-对样本数据进行标准化处理%prepca-对样本数据进行主元分析%newff-生成一个新的前向神经网络%train-对BP网络进行训练%sim-对BP网络进行仿真%postreg-对仿真结果进行回归分析%加载样本数据load choles_all.matsizeofp=size(p);sizeoft=size(t);%对样本数据进行标准化处理[pn,meanp,stdp,tn,meant,stdt]=prestd(p, t);%对样本数据进行主元分析[ptrans,transMat]=prepca(pn,0.001); [R,Q]=size(ptrans);% 将样本数据划分为训练集、验证集和测试集iitst=2:4:Q;iival=4:4:Q;iitr=[1:4:Q 3:4:Q];val.P=ptrans(:,iival);%验证样本集val.T=tn(:,iival);test.P=ptrans(:,iitst);%测试样本集test.T=tn(:,iitst);ptr=ptrans(:,iitr);%训练样本集ttr=tn(:,iitr);%创建神经网络net=newff(minmax(ptr),[53],{'tansig','purelin'},'trainlm'); [net,tr]=train(net,ptr,ttr,[],[],val,te st);%绘制误差变化曲线plot(tr.epoch,tr.perf,tr.epoch,tr.vperf,':',tr.epoch,tr.tperf,'r-.') legend('Training','Validation','Test',-1);ylabel('Squard Error'); xlabel('Epoch'); %对神经网络进行仿真分析 an=sim(net,ptrans); a=poststd(an,meant,stdt);%将仿真结果与目标输出作线性回归分析 for i=1:3 figure(i+1)[m(i),b(i),r(i)]=postreg(a(i,:),t(i,:)); end运行结果:2468100.20.40.60.811.21.41.6EpochS q u a r d E r r o rTraining Validation Test2 采用2种不同的训练算法来训练BP网络,使其能够拟合某一附加有白噪声的正弦样本数据,其中样本数据可以采用下列语句生成:输入矢量:P=[-1:0.05:1];目标矢量:randn(’seed’,78341223);T=sin(2*pi*P)+0.1*randn(size(P));% NEWFF——生成一个新的前向神经网络% TRAIN——对BP 神经网络进行训练% SIM——对BP 神经网络进行仿真算法1:Trainlm(L-M优化方法)程序:%定义网络输入和期望输出P=[-1:0.05:1];randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P));%建立相应的BP网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainlm');inputWeights=net.IW{1,1};inputbias=net.b{1};% 训练网络net.trainParam.show=50;net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM算法训练BP网络net=train(net,P,T);%对BP网络进行仿真A=sim(net,P);E=A-T;M=mse(E);N=sse(E);%测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差'); legend('训练样本误差'); ylabel('训练绝对误差'); xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图算法2trainrp (弹性学习算法) 程序:%定义网络输入和期望输出 P=[-1:0.05:1]; randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P)); %建立相应的BP 网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainrp'); inputWeights=net.IW{1,1}; inputbias=net.b{1};% 训练网络net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM 算法训练BP 网络 net=train(net,P,T);%对BP 网络进行仿真 A=sim(net,P); E=A-T; M=mse(E); N=sse(E); %测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差');51015202530354045-0.500.51BP 网络训练误差样本个数训练绝对误差legend('训练样本误差'); ylabel('训练绝对误差');xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图51015202530354045-0.8-0.6-0.4-0.200.20.40.60.8BP 网络训练误差样本个数训练绝对误差。

BP网络逼近sin函数

BP网络逼近sin函数
b2 = rands(outputLayer,1);%输出层阈值
alpha = 0.4;%学习速率
error = 0.0001;%误差阈值
M = 200;
%%训练数据200
for m = 1:M
y = sin(0.01*pi*m);%实际样本输出
for k = 1:50
%%对每个数据训练50次
for i = 1:hideLayer %隐层
hold on
plot (x,y1,'r-');
legend('标准sin图像','BP逼近的sin图像')
figure;
plot(e1);
title('错误率')
p(i) = logsig(w1(i) * x(m) + b1(i));
end
a = 0; %输出层
for j = 1:hideLayer
q(j) = p(j) * w2(j);
a = a + q(j);
end
a = a + b2;
if m <= 100
A = logsig(a);
elseif m > 100
bp网络函数逼近神经网络函数逼近函数逼近函数逼近论matlab函数逼近函数逼近理论函数逼近论方法样条函数逼近样条函数及其逼近复变函数逼近
%%网络结构1-2-1,学习率alpha=0.4
clear all;
close all;
clc;
input = 1; %输入层像两个数
hideLayer = 2;%隐藏层神经元个数
outputLayer = 1;%输出层神经元个数
x = [0.01*pi:0.01*pi:2*pi];%输入向量(1*200)

智能计算bp网络设计基于bp网络的分类和非线性函数逼近

智能计算bp网络设计基于bp网络的分类和非线性函数逼近

1、基于BP网络的分类(1)问题的提出:在平直直角坐标系A 区域中 = x,y :x∈−4 ,0 ,y∈−4 ,0随机生成1000个点,令B 区域中的点为一类:B= x,y :x∈(−2.5 ,1) ,y∈(−2.5 ,1)A 区域的其他点为一类,现在利用BP神经网络学习这个分类,并用测试集C 中的点C= x k,y k: x k=−4+0.05k ,y k=−4+0.05k ,k=0,1,…,80测试C 中位于B 区域中的点能否被识别。

(2)网络的结构:net=newff([-4 0;-4 0],[n 2],{'logsig' 'logsig'},'trainlm','learngdm');(3)网络训练(采用不同的隐单元个数,使用常数及自适应学习率,加动量项,数值优化算法)采用不同的隐单元个数:隐层节点个数为n,本次实验取n=8和n=14并对其进行比较。

使用常数及自适应学习率:常数:net.trainParam.lr=0.1。

自适应学习率:'trainlm' 这个位置替换为'traingda' (在分类中并不能换)加动量项:'trainlm' 这个位置替换为'traingdm'(在分类中并不能换)数值优化算法:'trainlm' 这个位置替换为'traingdx'(在分类中并不能换)(4)网络测试与结果分析:①条件:隐层节点个数n=8 + 学习率常数net.trainParam.lr=0.1 + 梯度下降训练'trainglm'clear all;clc%给定训练点及目标值x=(rand(1,1000)*(-0.4))*10;y=(rand(1,1000)*(-0.4))*10;x=[x;y];T=zeros(2,size(x,2));for i=1:size(x,2);if abs(x(1,i)) < 2.5 && abs(x(1,i)) > 1 && abs(x(2,i)) < 2.5 && abs(x(2,i)) > 1 T(1,i)=1;endendfor i = 1:size(x,2);if T(1,i) == 1T(2,i) = 0;else T(2,i) = 1;endendinputs = x;targets = T;% 创建网络n = 8;net=newff([-4 0;-4 0],[n 2],{'logsig' 'logsig'},'trainlm','learngdm'); %Levenberg-Marquardtnet.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; %数据归一化net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'}; %数据归一化%% 训练参数net.trainParam.epochs = 2000;net.trainParam.goal = 1e-4;net.trainParam.lr = 0.1;% 训练网络[net,tr] = train(net,inputs,targets);% 测试网络outputs = net(inputs);errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs);%% 训练集合绘图figure(1);hold onfor i=1:size(x,2)if T(1,i)==1plot(x(1,i),x(2,i),'b*');endif T(2,i)==1plot(x(1,i),x(2,i),'r*');endend%% 模拟绘图figure(2);test=-4:0.05:0;output=[];[A,B]=meshgrid(test,test);C=[];v=size(test,2);for i=1:vC(1,1+(i-1)*v:i*v)=A(i,:);C(2,1+(i-1)*v:i*v)=B(i,:);endoutput=abs(net(C));N=zeros(1,v*v);for i=1:v*vif output(1,i)>=output(2,i)N(1,i)=1;endendplot3(C(1,:),C(2,:),N,'o');结果分析:说明8个隐藏层节点太少了,没有达到精度就到了最大迭代次数。

研究实验2报告示范——单入单出BP人工神经网络及算法研究

研究实验2报告示范——单入单出BP人工神经网络及算法研究

研究实验2报告示范——单入单出BP 人工神经网络及算法研究一.研究问题描述:用BP 方法实现一个单输入单输出的函数的逼近。

假设转换函数的输出范围在0到1之间。

函数取以下3个:(),0.20.8x f x e x -=≤≤()0.50.3*sin ,01f x x x =+≤≤()0.50.3*sin(2*),01f x x x =+≤≤二.网络结构:1.三层前向神经网络根据逼近定理知,只含一个隐层的前向网络(即三层前向神经网络)是一个通用的逼近器,可以任意逼近函数f ,因此,在本题中选用三层前向神经网络,即输入层(x0,y0),一个隐层(x1,y1),输出层(x2,y2)。

2.网络结构由于要逼近的函数为单输入单输出函数,故输出层只有一个节点;输入层除了一个样本输入点外,还有一个阈值单元,因此可以看作是两个输入节点;隐层的节点个数p 可以在程序运行时进行选择,以适应和测试不同的逼近效果。

由输入层至隐层的权矩阵记为W0,由隐层到输出层的权矩阵记为W1。

整个网络的结构初步设计如下图所示:(略)三.算法实现本实验用C++程序实现该算法。

报告中所给出的实验数据均是运行C++程序所得的结果,然后将这些结果在matlab 中画出对应图形。

1.标准BP 算法(无动量项):根据公式:(α为学习率)-----⋅⋅-=∂∂⋅-=+Pl l l l l l j i l l j i l l j i k y k k w k w E k w k w 1,1,1,,1,,1,)()()()(/)()1(δαα编写程序,程序执行时允许选择:样本个数p ,隐层节点个数midnumber ,学习速率step ,训练过程结束条件(即训练结束时允许的最大误差)enderr 。

2.加动量项的BP 算法基本原理同上,仅在标准BP 算法的基础上,对权矩阵的修改添加动量项,程序执行时允许选择:样本个数p ,隐层节点个数midnumber ,学习速率step ,训练过程结束条件(即训练结束时允许的最大误差)enderr ,以及动量因子moti 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机器学习作业一BP神经网络实现函数逼近
一.算法描述
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。

BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。

它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。

BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

二.数据描述
逼近函数y = sin(x)
三.算法参数
输入学习率,迭代次数,逼近函数,神经网络规模
输出逼近的函数
四.实验流程
反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播。

这两个过程简述如下:
1.正向传播
输入的样本从输入层经过隐单元一层一层进行处理,传向输出层;在逐层处理的过程中。

在输出层把当前输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。

2.反向传播
反向传播时,把误差信号按原来正向传播的通路反向传回,逐层修改连接权值,以望代价函数趋向最小。

输入层输入向量(n维):X=(x1,x2,…,xi,…,xn)T
隐层输出向量(隐层有m个结点):Y=(y1,y2,…,yj,…,ym)T
输出层输出向量(l维):O=(o1,o2,…,ok,…,ol)T
期望输出向量:d=(d1, d2,…,dk,…,dl)T
输入层到隐层之间的权值矩阵:V=(V1,V2,…,Vj,…,Vm)
隐层到输出层之间的权值矩阵用:W=(W1,W2,…,Wk,…,Wl)
对输出层第k个结点和隐含层的第j个结点有如下关系:
激活函数f(x)常用sigmoid函数(一个在生物学中常见的S型的函数,也称为S 形生长曲线)或者tanh(双曲正切)函数。

各种S型曲线函数如下图所示:
下面以sigmoid函数进行推导。

sigmoid函数定义为:
其导函数为:
定义对单个样本输出层所有神经元的误差总能量总和为:
将以上误差定义式展开至隐层:
权值调整思路为:
上面式子中负号表示梯度下降,常数η∈(0,1)表示权值调整步长(学习速度)。

推导过程中,对输出层有j=0,1,2,…,m;k=1,2,…,l;对隐层有
i=0,1,2,…,n;j=1,2,…,m
对输出层和隐层,上面式子可写为:
对输出层和隐层,定义δ:
将以上结果代入δ的表达式,并根据sigmoid函数与其导函数的关
系:f'(x)=f(x)*[1-f(x)],可以计算出:
可以看出要计算隐层的δ,需要先从输出层开始计算,显然它是反向递推计算的公式。

以此类推,对于多层神经网络,要先计算出最后一层(输出层)的δ,然后再递推计算前一层,直到输入层。

根据上述结果,三层前馈网的BP学习算法权值调整计算公式为:
对所有输入样本(P为训练样本的个数),以总的平均误差能量作为经验损失函数(经验风险函数,代价函数)为:
五.实验结果
六.讨论
神经网络可以用作分类、聚类、预测等。

神经网络需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。

在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。

虽然BP网络得到了广泛的应用,但自身也存在一些缺陷和不足,主要包括以下几个方面的问题。

首先,由于学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。

对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。

其次,BP算法可以使权值收敛到某个值,但并不保证其为误差平面的全局最小值,这是因为采用梯度下降法可能产生一个局部最小值。

对于这个问题,可以采用附加动量法来解决。

再次,网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。

因此,网络往往存在很大的冗余性,在一定程度上也增加了网络学习的负担。

最后,网络的学习和记忆具有不稳定性。

也就是说,如果增加了学习样本,训练好的网络就需要从头开始训练,对于以前的权值和阈值是没有记忆的。

但是可以将预测、分类或聚类做的比较好的权值保存。

相关文档
最新文档