有关神经网络BP算法的详细计算
这是一个简单的求异或问题的bp程序。你好好看看。自然就明白了。
神经网络算法例子(神经网络算法案例)
程序可在matlab中直接执行
%%%2-2-1Bp网络求异或问题%%%
clear;
lr=0.1; %学习速率
eps=0.0001; %精度
times=20000;
result=zeros(1,4);
p=[0 0 1 1;0 1 0 1]; %输入
t=[0 1 0 1]; %参考输出
w1=rand(2,2); %权值初始化
b1=rand(2,1);
w2=rand(2,1);
b2=rand(1);
for i=1:times;
error=0;
cw1=zeros(size(w1));
cb1=zeros(size(b1));
cw2=zeros(size(w2));
cb2=zeros(size(b2));
for j=1:4;
hl=w1'p(:,j)+b1;
hlo=1./(1+exp(-hl)); %隐含层作用函数
ol=w2'hlo+b2;
deta=t(j)-ol;
cw2=cw2+lrdetahlo;
cb2=cb2+lrdeta;
deta2=hlo.(1-hlo).w2deta; %隐含层作用函数的反函数
cb1=cb1+lrdeta2;
cw1=cw1+lrp(:,j)deta2';
error=error+0.5(t(j)-ol)(t(j)-ol);
end
w1=w1+cw1;b1=b1+cb1;%权值调整
w2=w2+cw2;b2=b2+cb2;
if error break; %检验精度 end; end; for j=1:4; %训练完之后检验结果 hl=w1'p(:,j)+b1; hlo=1./(1+exp(-hl)); ol=w2'hlo+b2; result(j)=ol; end; error,i,result %结果输出 对于未知的非线性函数,仅通过函数的输入输出数据难以准确寻找函数极值。这类问题可以通过神经网络结合遗传算法求解,利用神经网络的非线性拟合能力和遗传算法的非线性寻优能力寻找函数极值。本文用神经网络遗传算法寻优如下非线性函数极值,函数表达式为 函数图形如下图1所示。 从函数方程和图形可以看出,该函数的全局小值为0,对应的坐标为(0,0)。虽然从函数方程和图形中很容易找出函数极值及极值对应坐标,但是在函数方程未知的情况下函数极值及极值对应坐标就很难找到。 神经网络遗传算法函数极值寻优主要分为BP神经网络训练拟合和遗传算法极值寻优两步,算法流程如下图2所示。 神经网络训练拟合根据寻优函数的特点构建合适的BP神经网络,用非线性函数的输出数据训练BP网络,训练后的BP神经网络就可以预测函数输出。遗传算法极值寻优把训练后的BP神经网络预测结果作为个体适应度值,通过选择、交叉和变异操作寻找函数的全局值及对应输入值。 本文根据非线性函数有2个输入参数、1个输出参数,确定BP神经网络结构为2-5-1.取函数的4 000组输入输出数据,从中随机选取3 900组数据训练网络,100组数据测试网络性能,网络训练好后用于预测非线性函数输出。 遗传算法中个体采用实数编码,由于寻优函数只有2个输入参数,所以个体长度为2。个体适应度值为BP神经网络预测值,适应度值越小。交叉概率为0.4,变异概率为0.2。 用函数输入输出数据训练BP神经网络,使训练后的网络能够拟合非线性函数输出,保存训练好的网络用语计算个体适应度值。根据非线性函数方程随机得到该函数的4 000组输入输出数据,存储于data.mat中,其中input为函数输入数据,output为函数对应输出数据,从中随机抽取3 900组训练数据训练网络,100组测试数据测试网络拟合性能。后保存训练好的网络。 把训练好的BP神经网络预测输出作为个体适应度值。 BP神经网络拟合结果分析 本文中个体的适应度值为BP神经网络预测值,因此BP神经网络预测精度对于位置的寻找具有非常重要的意义。由于寻优非线性函数有2个输入参数、1个输出参数,所以构建的BP神经网络的结构为2-5-1。共取非线性函数4 000组输入输出数据,从中随机选择3 900组数据训练BP神经网络,100组数据作为测试数据测试BP神经网络拟合性能,BP神经网络预测输出和期望输出对比如下图3所示。 从BP神经网络预测结果可以看出,BP神经网络可以准确预测非线性函数输出,可以把网络预测近似看成函数实际输出。 遗传算法寻优结果分析 BP神经网络训练结束后,可以利用遗传算法寻找该非线性函数的小值。遗传算法的迭代次数是100次,种群规模是20,交叉概率为0.4,变异概率为0.2,采用浮点数编码,个体长度为21,优化过程中个体适应度值变化曲线如下图4所示。 本文所使用的方法有比较重要的工程应用价值,比如对于某项试验来说,试验目的是获取到试验结果对应的实验条件,但是由于时间和经费限制,该试验只能进行有限次,可能单靠试验结果找不到的试验条件。这时可以在已知试验数据的基础上,通过本文介绍的神经网络遗传算法寻找试验条件。 思路就是先根据试验条件数和试验结果数确定BP神经网络结构;然后把试验条件作为输入数据,试验结果作为输出数据训练BP网络,使得训练后的网络可以预测一定试验条件下的试验结果;后把试验条件作为遗传算法中的种群个体,把网络预测的试验结果作为个体适应度值,通过遗传算法推导试验结果及其对应试验条件。 神经网络一般都是做预测的啊,要是做优化得用遗传算法啊 如果想看具体算法就搜个ppt看,找本书,如果是想用则只需要学会用matlab神经网络工具包,网络上有该工具包的说明。 个人观点:算法透明,过程不透明 所谓算法透明,就是整个算法的计算流程,优化流程设计思想这些都是可知的 过程不透明,就是模型参数更新过程看不到,只能得到一个终结果,往往这个结果也是不可解释的,你很难从理论上解释这个算法为什么会给出这个结果 1:神经网络算法 2:Backpropagation算法详细介绍 3:非线性转化方程举例 4:自己实现神经网络算法NeuralNetwork 5:基于NeuralNetwork的XOR实例 6:基于NeuralNetwork的手写数字识别实例 7:scikit-learn中BernoulliRBM使用实例 8:scikit-learn中的手写数字识别实例 一:神经网络算法 1:背景 以人脑神经网络为启发,历史上出现过很多版本,但的是backpropagation 2:多层向前神经网络(Multilayer Feed-Forward Neural Network) 多层向前神经网络组成部分 输入层(input layer),隐藏层(hiddenlayer),输出层(output layer) 每层由单元(units)组成 输入层(input layer)是由训练集的实例特征向量传入 经过连接结点的权重(weight)传入下一层,一层的输出是下一层的输入 隐藏层的个数是任意的,输出层和输入层只有一个 每个单元(unit)也可以被称作神经结点,根据生物学来源定义 上图称为2层的神经网络(输入层不算) 一层中加权的求和,然后根据非线性的方程转化输出 作为多层向前神经网络,理论上,如果有足够多的隐藏层(hidden layers)和足够大的训练集,可以模拟出任何方程 3:设计神经网络结构 3.1使用神经网络训练数据之前,必须确定神经网络层数,以及每层单元个数 3.2特征向量在被传入输入层时通常被先标准化(normalize)和0和1之间(为了加强学习过程) 3.3离散型变量可以被编码成每一个输入单元对应一个特征可能赋的值 比如:特征值A可能取三个值(a0,a1,a2),可以使用三个输入单元来代表A 如果A=a0,那么代表a0的单元值就取1,其他取0 如果A=a1,那么代表a1的单元值就取1,其他取0,以此类推 3.4神经网络即可以用来做分类(classification)问题,也可以解决回归(regression)问题 3.4.1对于分类问题,如果是2类,可以用一个输入单元表示(0和1分别代表2类) 如果多于两类,每一个类别用一个输出单元表示 所以输入层的单元数量通常等于类别的数量 3.4.2没有明确的规则来设计有多少个隐藏层 3.4.2.1根据实验测试和误,以及准确度来实验并改进 4:算法验证——交叉验证法(Cross- Validation) 解读: 有一组输入集A,B,可以分成三组,第一次以第一组为训练集,求出一个准确度,第二次以第二组作为训练集,求出一个准确度,求出准确度,第三次以第三组作为训练集,求出一个准确度,然后对三个准确度求平均值 二:Backpropagation算法详细介绍 1:通过迭代性来处理训练集中的实例 2:输入层输入数 经过权重计算得到第一层的数据,第一层的数据作为第二层的输入,再次经过权重计算得到结果,结果和真实值之间是存在误的,然后根据误,反向的更新每两个连接之间的权重 3:算法详细介绍 输入:D : 数据集,| 学习率(learning rate),一个多层前向神经网络 输出:一个训练好的神经网络(a trained neural network) 3.1初始化权重(weights)和偏向(bias):随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元有一个偏向 3.2对于每一个训练实例X,执行以下步骤: 3.2.1:由输入层向前传送,输入->输出对应的计算为: 计算得到一个数据,经过f 函数转化作为下一层的输入,f函数为: 3.2.2:根据误(error)反向传送 对于输出层(误计算): Tj:真实值,Qj表示预测值 对于隐藏层(误计算): Errk 表示前一层的误, Wjk表示前一层与当前点的连接权重 权重更新: l:指学习比率(变化率),手工指定,优化方法是,随着数据的迭代逐渐减小 偏向更新: l:同上 3.3:终止条件 3.3.1权重的更新低于某个阀值 3.3.2预测的错误率低于某个阀值 3.3.3达到预设一定的循环次数 4:结合实例讲解算法 0.9对用的是L,学习率 测试代码如下: 1.NeutralNetwork.py文件代码 #coding:utf-8 2、测试代码 #coding:utf-8 测试结果如下: 自己找个例子算一下,推导一下,这个回答起来比较复杂 神经网络对模型的表达能力依赖于优化算法,优化是一个不断计算梯度并调整可学习参数的过程,Fluid中的优化算法可参考 优化器 。 在网络的训练过程中,梯度计算分为两个步骤:前向计算与 反向传播 。 前向计算会根据您搭建的网络结构,将输入单元的状态传递到输出单元。 反向传播借助 链式法则 ,计算两个或两个以上复合函数的导数,将输出单元的梯度反向传播回输入单元,根据计算出的梯度,调整网络的可学习参数。 BP算法 隐层的引入使网络具有很大的潜力。但正像Minskey和Papert当时所指出的.虽然对所有那些能用简单(无隐层)网结解决的问题有非常简单的学习规则,即简单感知器的收敛程序(主要归功于Widrow和HMf于1960年提出的Delta规刚), BP算法 但当时并没有找到同样有技的含隐层的同培的学习规则。对此问题的研究有三个基本的结果。一种是使用简单无监督学习规则的竞争学习方法.但它缺乏外部信息.难以确定适台映射的隐层结构。第二条途径是假设一十内部(隐层)的表示方法,这在一些先约条件下是台理的。另一种方法是利用统计手段设计一个学习过程使之能有技地实现适当的内部表示法,Hinton等人(1984年)提出的Bolzmann机是这种方法的典型例子.它要求网络在两个不同的状态下达到平衡,并且只局限于对称网络。Barto和他的同事(1985年)提出了另一条利用统计手段的学习方法。但迄今为止有教和实用的方瑶是Rumelhart、Hinton和Williams(1986年)提出的一般Delta法则,即反向传播(BP)算法。Parter(1985年)也独立地得出过相似的算法,他称之为学习逻辑。此外, Lecun(1985年)也研究出大致相似的学习法则。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。神经网络遗传算法函数极值寻优
求人工神经网络的具体算法,数学模型,比如求一个函数值之类的,不要各种乱七八糟的介绍,谢谢
人工神经网络提供透明的算法吗
如何用python和scikit learn实现神经网络
bp神经网络用啥算法?