BP神经网络是一种广泛应用于数值预测、模式识别、曲线拟合、数据压缩等问题的仿生模型它属于一种前馈神经网络它通过BP(误差后向传播)算法来计算梯度、再通过梯度下降等算法来进行训练。本文面向初学者展示一个BP神经网络的实现与应用。本文主要来自《老饼讲解-BP神经网络》一、BP神经网络-介绍BP神经网络是一种前馈神经网络它通过BP(误差后向传播)算法来计算梯度、再通过梯度下降等算法来进行训练。BP神经网络的模型结构如下一个训练完成的BP神经网络理论上可以用于拟合任意的x、y关系。常用于解决数值预测、模式识别、曲线拟合、数据压缩(特征提取)等等问题二、如何训练一个BP神经网络在matlab中可以比较快速的训练一个BP神经网络下面我们以matlab自带的acetylene化学反应数据为例来展示如何训练一个BP神经网络用于预测。2.1.例子数据acetylene化学反应数据如下如表格所示acetylene数据共16条数据包含三个变量x1,x2,x3和一个y现在要用x1,x2,x3来预测y就好了。2.2. 代码实现使用matlab来构建一个BP神经网络并进行训练代码如下% 本代码来自《老饼讲解-BP神经网络》www.bbblearn.comload acetylene.mat% 加载acetylene数据setdemorandstream(88888);% 指定随机种子,这样每次训练出来的网络都一样% 数据加载X[x1,x2,x3];% 将x1,x2,x3作为输入数据Yy;% 将y作为输出数据% 模型训练netnewff(X,Y,4,{tansig,purelin},trainlm);% 初始化BP神经网络net.trainparam.goal0.0001;% 训练目标:均方误差低于0.0001net.trainparam.show400;% 每训练400次展示一次结果net.trainparam.epochs15000;% 最大训练次数15000.[net,tr]train(net,X,Y);% 调用matlab自带的train函数训练网络% 模型预测pysim(net,X);% 调用matlab的sim函数得到网络的预测值figure;% 新建画图窗口窗口t1:length(py);% 数据的序号plot(t,Y,*,t,py,o)% 画图,对比原来的y和网络预测的ylegend(真实值,预测值)% 展示图例代码运行结果如下可以看到我们的BP神经网络的预测值与样本数据的真实值基本是一致的说明我们的模型训练成功了。2.3. 关键代码解说好了接下来我们看看关键代码。(1) 训练代码第8行是初始化一个BP神经网络newff函数就是matlab里构建BP神经网络的函数了newff函数第1、2个参数就是我们的训练数据的X和Y了。然后第3个参数4代表隐节点个数第4个参数{‘tansig’,‘purelin’}则代表第一个隐层用tanh函数第二个隐层(即输出层)用purelin(yx)函数最后呢我们选择了用trainlm算法进行训练它所使用的就是LM列文伯格-马跨特算法进行训练如果不设训练算法那么默认也是用trainlm算法。(其实matlab已经有新函数构建BP了但大部分资料仍用newff用新函数不易找资料所以继续用newff就好了。)第9-11行是设置一些训练参数。goal0.0001代表误差达到0.0001时就会停止训练show400代表每训练400步就会展示一次结果而epochs15000就是最多训练15000步。还有一些其它参数我们以后再讲。第12行就是正式训练模型了。好了train函数共有三个关键入参其中net就是我们上面初始化好的BP神经网络而X,Y就是我们用来训练模型(也就是调整模型的参数)所使用的数据。然后经过train后模型就开始训练了训练完后就会返回net和tr这两个关键出参其中net就是训练好的BP神经网络tr是训练中的一些记录就是train record的意思tr具体的使用我们暂时先不管以后用到再说。整体来说第8行newff是初始化模型第9-11行是设置训练参数第12行的train才真正用X、Y来训练模型。(2) 模型预测-代码解说上面我们已经训练好模型了下面我们来看看如何用训练好的模型进行预测。第15行是使用训练好的模型net来对X进行预测其中sim函数就是simmulate(模拟)的意思sim(net,X)就会返回net对X的预测结果曾经有同学问我这个X是什么这个X就是你想预测的X例如想知道x11000,x22,x35时y的预测结果那么就需要传入X[1000,2,5]。这里我们传入了所有X样本最终就会得到所有X的预测结果。16-19行就是画图了就是画出真实Y与预测Y的散点图没什么好说的。结束语以上就是BP神经网络的简单使用了。更详细可以参考【1】BP神经网络-简单例子【2】BP神经网络-模型结构【3】BP神经网络-训练算法