BP神经网络实例含源码

合集下载

BP神经网络步骤及应用实例

BP神经网络步骤及应用实例

1、数据归一化‎2、数据分类,主要包括打‎乱数据顺序‎,抽取正常训‎练用数据、变量数据、测试数据3、建立神经网‎络,包括设置多‎少层网络(一般3层以‎内既可以,每层的节点‎数(具体节点数‎,尚无科学的‎模型和公式‎方法确定,可采用试凑‎法,但输出层的‎节点数应和‎需要输出的‎量个数相等‎),设置隐含层‎的传输函数‎等。

关于网络具‎体建立使用‎方法,在后几节的‎例子中将会‎说到。

4、指定训练参‎数进行训练‎,这步非常重‎要,在例子中,将详细进行‎说明5、完成训练后‎,就可以调用‎训练结果,输入测试数‎据,进行测试6、数据进行反‎归一化7、误差分析、结果预测或‎分类,作图等数据归一化‎问题归一化的意‎义:首先说一下‎,在工程应用‎领域中,应用BP网‎络的好坏最‎关键的仍然‎是输入特征‎选择和训练‎样本集的准‎备,若样本集代‎表性差、矛盾样本多‎、数据归一化‎存在问题,那么,使用多复杂‎的综合算法‎、多精致的网‎络结构,建立起来的‎模型预测效‎果不会多好‎。

若想取得实‎际有价值的‎应用效果,从最基础的‎数据整理工‎作做起吧,会少走弯路‎的。

归一化是为‎了加快训练‎网络的收敛‎性,具体做法是‎:1 把数变为(0,1)之间的小数‎主要是为了‎数据处理方‎便提出来的‎,把数据映射‎到0~1范围之内‎处理,更加便捷快‎速,应该归到数‎字信号处理‎范畴之内。

2 把有量纲表‎达式变为无‎量纲表达式‎归一化是一‎种简化计算‎的方式,即将有量纲‎的表达式,经过变换,化为无量纲‎的表达式,成为纯量比如,复数阻抗可‎以归一化书‎写:Z = R + jωL = R(1 + jωL/R) ,复数部分变‎成了纯数量‎了,没有量纲。

另外,微波之中也‎就是电路分‎析、信号系统、电磁波传输‎等,有很多运算‎都可以如此‎处理,既保证了运‎算的便捷,又能凸现出‎物理量的本‎质含义。

神经网络归‎一化方法:由于采集的‎各数据单位‎不一致,因而须对数‎据进行[-1,1]归一化处理‎,归一化方法‎主要有如下‎几种,供大家参考‎:1、线性函数转‎换,表达式如下‎:复制内容到‎剪贴板代码‎:y=(x-MinVa‎l ue)/(MaxVa‎l ue-MinVa‎l ue)说明:x、y分别为转‎换前、后的值,MaxVa‎l ue、MinVa‎l ue分别‎为样本的最‎大值和最小‎值。

bp神经网络实例分析

bp神经网络实例分析

数据集划分
01
02
03
训练集
用于训练神经网络,占总 数据的70%-90%。
验证集
用于调整超参数和选择最 佳模型,占估模型的性能,占 总数据的10%-30%。
03
BP神经网络模型构建
神经元模型
神经元模型
神经元是神经网络的基本单元, 它模拟了生物神经元的基本功能,
误差计算
根据实际输出与期望输出计算误差。
权值调整
根据误差反向传播算法调整各层的权值和阈值。
迭代训练
重复前向传播和权值调整过程,直到达到预设的迭代次 数或误差要求。
02
BP神经网络实例选择与数据准备
实例选择
选择一个具有代表性的问题
为了展示BP神经网络的应用,选择一个具有代表性的问题,例如 分类、回归或聚类等。
成。
节点数量
02
每一层的节点数量需要根据具体问题来确定,过多的节点可能
导致过拟合,而节点过少则可能无法充分提取数据特征。
连接权重
03
连接权重是神经网络中非常重要的参数,它决定了神经元之间
的连接强度和信息传递方式。
激活函数选择
激活函数的作用
激活函数用于引入非线性特性,使得神经网络能够更好地处理复 杂的非线性问题。
误差反向传播
当实际输出与期望输出不符时,进入 误差反向传播阶段,误差信号从输出 层开始逐层向输入层传播,并根据误 差调整各层的权值和阈值。
训练过程
数据准备
准备训练数据和测试数据,并对数据进行预 处理,如归一化等。
网络初始化
为各层神经元设置初始权值和阈值。
前向传播
输入样本数据,通过正向传播计算每一层的输出 值。
3

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人工神经网络的基本原理模型与实例BP(Back Propagation)人工神经网络是一种常见的人工神经网络模型,其基本原理是模拟人脑神经元之间的连接和信息传递过程,通过学习和调整权重,来实现输入和输出之间的映射关系。

BP神经网络模型基本上由三层神经元组成:输入层、隐藏层和输出层。

每个神经元都与下一层的所有神经元连接,并通过带有权重的连接传递信息。

BP神经网络的训练基于误差的反向传播,即首先通过前向传播计算输出值,然后通过计算输出误差来更新连接权重,最后通过反向传播调整隐藏层和输入层的权重。

具体来说,BP神经网络的训练过程包括以下步骤:1.初始化连接权重:随机初始化输入层与隐藏层、隐藏层与输出层之间的连接权重。

2.前向传播:将输入向量喂给输入层,通过带有权重的连接传递到隐藏层和输出层,计算得到输出值。

3.计算输出误差:将期望输出值与实际输出值进行比较,计算得到输出误差。

4.反向传播:从输出层开始,将输出误差逆向传播到隐藏层和输入层,根据误差的贡献程度,调整连接权重。

5.更新权重:根据反向传播得到的误差梯度,使用梯度下降法或其他优化算法更新连接权重。

6.重复步骤2-5直到达到停止条件,如达到最大迭代次数或误差小于一些阈值。

BP神经网络的训练过程是一个迭代的过程,通过不断调整连接权重,逐渐减小输出误差,使网络能够更好地拟合输入与输出之间的映射关系。

下面以一个简单的实例来说明BP神经网络的应用:假设我们要建立一个三层BP神经网络来预测房价,输入为房屋面积和房间数,输出为价格。

我们训练集中包含一些房屋信息和对应的价格。

1.初始化连接权重:随机初始化输入层与隐藏层、隐藏层与输出层之间的连接权重。

2.前向传播:将输入的房屋面积和房间数喂给输入层,通过带有权重的连接传递到隐藏层和输出层,计算得到价格的预测值。

3.计算输出误差:将预测的价格与实际价格进行比较,计算得到输出误差。

4.反向传播:从输出层开始,将输出误差逆向传播到隐藏层和输入层,根据误差的贡献程度,调整连接权重。

神经网络中BP算法的原理与Python实现源码解析

神经网络中BP算法的原理与Python实现源码解析

神经⽹络中BP算法的原理与Python实现源码解析最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能⼒有限,若有明显错误,还请指正。

什么是梯度下降和链式求导法则假设我们有⼀个函数 J(w),如下图所⽰。

梯度下降⽰意图现在,我们要求当 w 等于什么的时候,J(w) 能够取到最⼩值。

从图中我们知道最⼩值在初始位置的左边,也就意味着如果想要使 J(w) 最⼩,w的值需要减⼩。

⽽初始位置的切线的斜率a > 0(也即该位置对应的导数⼤于0),w = w – a 就能够让 w 的值减⼩,循环求导更新w直到 J(w) 取得最⼩值。

如果函数J(w)包含多个变量,那么就要分别对不同变量求偏导来更新不同变量的值。

所谓的链式求导法则,就是求复合函数的导数:链式求导法则放个例题,会更加明⽩⼀点:链式求导的例⼦神经⽹络的结构神经⽹络由三部分组成,分别是最左边的输⼊层,隐藏层(实际应⽤中远远不⽌⼀层)和最右边的输出层。

层与层之间⽤线连接在⼀起,每条连接线都有⼀个对应的权重值 w,除了输⼊层,⼀般来说每个神经元还有对应的偏置 b。

神经⽹络的结构图除了输⼊层的神经元,每个神经元都会有加权求和得到的输⼊值 z 和将 z 通过 Sigmoid 函数(也即是激活函数)⾮线性转化后的输出值 a,他们之间的计算公式如下神经元输出值 a 的计算公式其中,公式⾥⾯的变量l和j表⽰的是第 l 层的第 j 个神经元,ij 则表⽰从第 i 个神经元到第 j 个神经元之间的连线,w 表⽰的是权重,b 表⽰的是偏置,后⾯这些符号的含义⼤体上与这⾥描述的相似,所以不会再说明。

下⾯的 Gif 动图可以更加清楚每个神经元输⼊输出值的计算⽅式(注意,这⾥的动图并没有加上偏置,但使⽤中都会加上)动图显⽰计算神经元输出值使⽤激活函数的原因是因为线性模型(⽆法处理线性不可分的情况)的表达能⼒不够,所以这⾥通常需要加⼊ Sigmoid 函数来加⼊⾮线性因素得到神经元的输出值。

BP神经网络模型应用实例

BP神经网络模型应用实例

BP神经网络模型第1节基本原理简介近年来全球性的神经网络研究热潮的再度兴起,不仅仅是因为神经科学本身取得了巨大的进展.更主要的原因在于发展新型计算机和人工智能新途径的迫切需要.迄今为止在需要人工智能解决的许多问题中,人脑远比计算机聪明的多,要开创具有智能的新一代计算机,就必须了解人脑,研究人脑神经网络系统信息处理的机制.另一方面,基于神经科学研究成果基础上发展出来的人工神经网络模型,反映了人脑功能的若干基本特性,开拓了神经网络用于计算机的新途径.它对传统的计算机结构和人工智能是一个有力的挑战,引起了各方面专家的极大关注.目前,已发展了几十种神经网络,例如Hopficld模型,Feldmann等的连接型网络模型,Hinton等的玻尔茨曼机模型,以及Rumelhart等的多层感知机模型和Kohonen的自组织网络模型等等。

在这众多神经网络模型中,应用最广泛的是多层感知机神经网络。

多层感知机神经网络的研究始于50年代,但一直进展不大。

直到1985年,Rumelhart等人提出了误差反向传递学习算法(即BP算),实现了Minsky的多层网络设想,如图34-1所示。

BP 算法不仅有输入层节点、输出层节点,还可有1个或多个隐含层节点。

对于输入信号,要先向前传播到隐含层节点,经作用函数后,再把隐节点的输出信号传播到输出节点,最后给出输出结果。

节点的作用的激励函数通常选取S 型函数,如Qx e x f /11)(-+=式中Q 为调整激励函数形式的Sigmoid 参数。

该算法的学习过程由正向传播和反向传播组成。

在正向传播过程中,输入信息从输入层经隐含层逐层处理,并传向输出层。

每一层神经元的状态只影响下一层神经输入层 中间层 输出层 图34-1 BP 神经网络模型元的状态。

如果输出层得不到期望的输出,则转入反向传播,将误差信号沿原来的连接通道返回,通过修改各层神经元的权值,使得误差信号最小。

社含有n 个节点的任意网络,各节点之特性为Sigmoid 型。

神经网络BP算法源代码(C++)

神经网络BP算法源代码(C++)
void CBP_TView::OnBpLearn() { Simu(); //获得网络输入 out0[i][0] 和参考输出 targ[i][0] Random_w(); //随机获得网络初始权值 BeginWaitCursor(); double sum, dw; for (q=0; q<nRepeat; q++) // nRepeat: 最大重复次数 { for (p = 0; p < nLp; p++) //nLp = st/dt, Simu()中得到 { Work(p); //网络输出计算 //计算反向传播的 delta for (i = 0; i < nOut; i++) //输出层 delta = (targ-y)*y*(1-y) delta2[p][i] = (targ[p][i] - out2[p][i])*out2[p][i]*(1.0-out2[p][i]); for(int h = 0; h <nHide; h++) { //隐层 (1 yh ) yh out who sum = 0; for(j = 0;j < nOut;j++) sum+=delta2[p][j]*w2[j][h]; delta1[p][h] = sum*out1[p][h]*(1.0-out1[p][h]); } } //调整隐层-输出层权值 for ( j=0;j<nOut;j++) { sum = 0; for(p = 0; p<nLp; p++) sum+=delta2[p][j]; //得到每个输出节点的偏置的权值 w(nHide), // eta: 学习率, alpha: 动量因子 dw = eta*sum + alpha*delw2[j][nHide]; // w2[j][nHide] += dw; // delw2[j][nHide] = dw; // //得到其它的权值 for (h = 0; h < nHide; h++) { sum = 0; for(p = 0; p < nLp; p++) sum+=delta2[p][j]*out1[p][h]; dw = eta*sum + alpha*delw2[j][h]; w2[j][h] += dw; delw2[j][h] = dw; } } //调整输入层-隐层权值 for (h= 0;h < nHide; h++) { sum = 0; for (p = 0; p < nLp; p++) sum += delta1[p][h];) , //eta: 学习率, alpha: 动量因子 dw = eta*sum+alpha*delw1[h][nIn]; w1[h][nIn] += dw; delw1[h][nIn] = dw; //得到其它的权值 for(i = 0; i < nIn; i++) { sum = 0; for (p = 0; p < nLp; p++) sum+=delta1[p][h]*out0[p][i]; dw = eta*sum+alpha*delw1[h][i]; w1[h][i]+=dw;

(完整版)BP神经网络matlab实例(简单而经典)

(完整版)BP神经网络matlab实例(简单而经典)

p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。

S S SNl:各层的神经元个数。

[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。

BTF:训练用函数的名称。

(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

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

BP神经网络实例含源码BP神经网络算法实现一:关于BP网络BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。

输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。

当实际输出与期望输出不符时,进入误差的反向传播阶段。

误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。

周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

BP网络主要应用于以下方面:函数逼近、模式识别和分类、数据压缩。

BP神经网络有较强的泛化性能,使网络平滑的逼近函数,能合理的响应被训练以外的输入。

同时,BP网络又有自己的限制与不足,主要表现在:需要较长的训练时间、网络训练的结果可能使得权值逼近局部最优、训练数据范围外的数据泛化能力较差。

为了避免训练陷入局部最优解,本程序采用改进的BP网络训练,既加入动量因子,使得网络在最优解附近有一定的震荡,跳出局部最优的范围。

BP网络训练中学习速率与动量因子的选择很重要,在后面的内容中将进行详细的讨论。

二:训练的函数程序中训练的函数为一个三输入一输出的非线性函数,如下所示: x3xR,yxxe,,,,2sin(),,,12网络结构为:3—5—1三:程序及相关界面(VB)1 主界面1代码:Private Sub Command1_Click() form2.Visible = FalseForm3.Visible = TrueEnd SubPrivate Sub Command2_Click() form2.Visible = FalseForm1.Visible = TrueEnd SubPrivate Sub Command3_Click() form2.Visible = FalseForm4.Visible = TrueEnd SubPrivate Sub Command4_Click() form2.Visible = FalseForm5.Visible = TrueEnd SubPrivate Sub Command5_Click() EndEnd SubPrivate Sub Form_Load() Command3.Enabled = False Command4.Enabled = False End Sub2 查看网络结构2代码:Private Sub Command1_Click()Form3.Visible = False form2.Visible = True End Sub3 网络训练代码:3Private Sub Command1_Click()Form1.Visible = Falseform2.Visible = TrueEnd SubPrivate Sub Command2_Click()Label2.Caption = "样本训练中…"Dim i As Integer, j As Integer, k As Integer, p As Integer, s As SingleDim Maxx(1 To 3) As Single, Minx(1 To 3) As Single, Meanx(1 To 3) As SingleDim x(1 To 3, 1 To 100) As Single, sumx(1 To 3) As Single, Temp As SingleDim Datex(1 To 3, 1 To 100) As Single, inputx(1 To 3) As Single, outputx(1 To 100) As SingleDim Ex(1 To 100) As SingleDim time(1 To 5000) As Integer, cishu(1 To 100) As IntegerDim Dv_1(1 To 5, 1 To 3) As Single, Dw_1(1 To 5) As SingleDim R As SingleDim Maxd As Single, Mind As SingleDim s1(1 To 5) As Single, y1(1 To 5, 1 To 100) As Single, s2 As Single, y2(1 To 100) As SingleDim deltW(1 To 100) As Single, deltV(1 To 5, 1 To 100) As SingleDim Dw(1 To 5) As Single, Dv(1 To 5, 1 To 3) As Single Dim MyIn(1 To 3) As SingleDim Errorx(1 To 5000) As SingleRandomizeFor i = 1 To 3Maxx(i) = 0Minx(i) = 0Meanx(i) = 0Next iTemp = 0Maxd = 0Mind = 0For i = 1 To 5For j = 1 To 3Dv_1(i, j) = 0v(i, j) = 2 * Rnd - 1Next jDw_1(i) = 0w(i) = 2 * Rnd - 1Next iFor j = 1 To 3For i = 1 To 100x(j, i) = 4 * (2 * Rnd - 1)Next isumx(j) = 0Next j'求最值For j = 1 To 3For i = 1 To 100If x(j, i) >= Maxx(j) ThenMaxx(j) = x(j, i)End IfIf x(j, i) <= Minx(j) ThenMinx(j) = x(j, i)Temp = Temp + x(j, i)End IfNext isumx(j) = Temp4Temp = 0Meanx(j) = sumx(j) / 100 Next j'归一化For j = 1 To 3For i = 1 To 100If Maxx(j) - x(j, i) >= x(j, i) - Minx(j) Then R = Maxx(j) - x(j, i)ElseR = x(j, i) - Minx(j)End IfDatex(j, i) = (x(j, i) - Meanx(j)) / RNext iNext j'期望输出For i = 1 To 100For j = 1 To 3inputx(j) = Datex(j, i)Next joutputx(i) = 2 * (inputx(1) + Sin(inputx(2)) + Exp(inputx(3))) Next i'输出归一化For i = 1 To 100If Maxd <= outputx(i) ThenMaxd = outputx(i)End IfIf Mind >= outputx(i) ThenMind = outputx(i)End IfNext iFor i = 1 To 100Ex(i) = (outputx(i) - Mind) / (Maxd - Mind)Next i'训练For s = 1 To 5000 Step 1time(s) = sFor p = 1 To 100cishu(p) = pFor i = 1 To 3MyIn(i) = Datex(i, p)Next iFor i = 1 To 5For j = 1 To 3Temp = Temp + v(i, j) * MyIn(j)Next js1(i) = TempTemp = 0Next iFor i = 1 To 5y1(i, p) = 1 / (1 + Exp(-s1(i)))Next iFor i = 1 To 3Temp = y1(i, p) * w(i) + TempNext is2 = TempTemp = 0y2(p) = 1 / (1 + Exp(-s2))deltW(p) = (Ex(p) - y2(p)) * y2(p) * (1 - y2(p))5For i = 1 To 5deltV(i, p) = deltW(p) * w(i) * y1(i, p) * (1 - y1(i, p)) Next iNext p'误差For i = 1 To 100Temp = Temp + (Ex(i) - y2(i)) ^ 2Next iErrorx(s) = TempTemp = 0'调整权值For i = 1 To 5Dw_1(i) = Dw(i)Next iFor i = 1 To 5For j = 1 To 100Temp = Temp + deltW(j) * y1(i, j)Next jDw(i) = TempTemp = 0Next iFor i = 1 To 5For j = 1 To 3Dv_1(i, j) = Dv(i, j)Next jNext iFor i = 1 To 5For j = 1 To 3For k = 1 To 100Temp = Temp + deltV(i, k) * Datex(j, k)Next kDv(i, j) = TempTemp = 0Next jNext iFor i = 1 To 5w(i) = 0.2 * Dw(i) + 0.2 * Dw_1(i) + w(i)Next iFor i = 1 To 3For j = 1 To 5v(j, i) = 0.2 * Dv(j, i) + 0.2 * Dv_1(j, i) + v(j, i) Next jNext i'画图Picture1.ClsPicture1.ScaleTop = 1.5Picture1.ScaleHeight = -2Picture1.ScaleLeft = -10Picture1.ScaleWidth = 120Picture1.Line (-9, 0)-(110, 0)Picture1.Line (0, 0)-(0, 1.5)For i = 1 To 100Picture1.PSet (cishu(i), Ex(i)), RGB(128, 128, 0)Picture1.PSet (cishu(i), y2(i)), RGB(128, 0, 0)Next iFor i = 1 To 99Picture1.Line (cishu(i), Ex(i))-(cishu(i + 1), Ex(i + 1)), RGB(128, 128, 0)Picture1.Line (cishu(i), y2(i))-(cishu(i + 1), y2(i + 1)), RGB(128, 0, 0)6Next i'延时For j = 1 To 1000For k = 1 To 50Next kNext jPicture2.ClsPicture2.Print sDoEventsNext sLabel2.Caption = ""mand3.Enabled = True mand4.Enabled = True '泛化Dim test(1 To 3, 1 To 20) As Single, sumE(1 To 3) As SingleDim MaxE(1 To 3) As Single, MinE(1 To 3) As Single, MeanE(1 To 3) As SingleDim MaxxE As Single, MinxE As Single Dim des(1 To 3) As Single,outE(1 To 20) As SingleDim MIn(1 To 3) As Single, s11(1 To 5) As Single, y11(1 To 5, 1 To 20) As Single, s22 As SingleDim DateE(1 To 3, 1 To 20) As SingleFor i = 1 To 20For j = 1 To 3test(j, i) = 4 * (2 * Rnd - 1)Next jNext iFor j = 1 To 3For i = 1 To 20If test(j, i) >= MaxE(j) ThenMaxE(j) = test(j, i)End IfIf test(j, i) <= MinE(j) ThenMinE(j) = test(j, i)Temp = Temp + test(j, i)End IfNext isumE(j) = TempTemp = 0MeanE(j) = sumE(j) / 100Next j'归一化For j = 1 To 3For i = 1 To 20If MaxE(j) - test(j, i) >= test(j, i) - MinE(j) Then R = MaxE(j) - test(j, i)ElseR = test(j, i) - MinE(j)End IfDateE(j, i) = (test(j, i) - MeanE(j)) / RNext iNext j'求输出For p = 1 To 20Ti(p) = pFor i = 1 To 3MIn(i) = DateE(i, p)Next iFor i = 1 To 57For j = 1 To 3Temp = Temp + v(i, j) * MIn(j)Next js11(i) = TempTemp = 0Next iFor i = 1 To 5y11(i, p) = 1 / (1 + Exp(-s11(i)))Next iFor i = 1 To 3Temp = y11(i, p) * w(i) + TempNext is22 = TempTemp = 0y22(p) = 1 / (1 + Exp(-s22))Next p'输出及归一化For j = 1 To 20For i = 1 To 3des(i) = DateE(i, j)Next ioutE(j) = 2 * (des(1) + Sin(des(2)) + Exp(des(3))) Next j'输出归一化For i = 1 To 20If MaxxE <= outE(i) ThenMaxxE = outE(i)End IfIf MinxE >= outE(i) ThenMinxE = outE(i)End IfNext iFor i = 1 To 20outD(i) = (outE(i) - MinxE) / (MaxxE - MinxE)Next iEnd Sub4 查看训练结果代码:8Private Sub Command1_Click() Form5.Visible = False form2.Visible = TrueEnd SubPrivate Sub Command2_Click() Picture1.ClsPicture2.ClsDim i As Integer, j As Integer For i = 1 To 5For j = 1 To 3Picture2.Print v(i, j); Spc(4);Next jPicture2.PrintPicture2.PrintPicture1.Print w(i); Next iEnd Sub5 泛化代码:Private Sub Command1_Click() Form4.Visible = False form2.Visible = TrueEnd SubPrivate Sub Command2_Click() For s = 1 To 20'Picture1.ClsPicture1.ScaleTop = 1.5Picture1.ScaleHeight = -2Picture1.ScaleLeft = -5Picture1.ScaleWidth = 30Picture1.Line (-5, 0)-(25, 0)Picture1.Line (0, -0.5)-(0, 1.5)For i = 1 To 20Picture1.PSet (Ti(i), outD(i)), RGB(128, 128, 0)Picture1.PSet (Ti(i), y22(i)), RGB(128, 0, 0)9Next iFor i = 1 To 19Picture1.Line (Ti(i), outD(i))-(Ti(i + 1), outD(i + 1)), RGB(128, 128, 0)Picture1.Line (Ti(i), y22(i))-(Ti(i + 1), y22(i + 1)), RGB(128, 0, 0) Next iNext sEnd Sub6 全局模块Public w(1 To 5) As Single, v(1 To 5, 1 To 3) As Single Public Ti(1To 20) As Single, y22(1 To 20) As Single, outD(1 To 20) As Single 四:相关分析及讨论以上编程实现了对一个三输入、一输出非线性函数的逼近,在模型训练中采用改进的BP网络——动量因子法,输入是随机产生的100组数据,输出是通过已知函数得到的相应期望输出,通过BP网络的5000代训练可以与期望输出拟合的很好,泛化也较理想,训练误差和泛化误差都在可接受范围内。

相关文档
最新文档