一篇详解-BP神经网络matlab实现例子与方法(newff)

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神经网络,并进行训练,代码如下:

matlab 复制代码
% 本代码来自《老饼讲解-BP神经网络》www.bbblearn.com
load acetylene.mat                                     % 加载acetylene数据
setdemorandstream(88888);                              % 指定随机种子,这样每次训练出来的网络都一样
% 数据加载
X = [x1,x2,x3]';                                       % 将x1,x2,x3作为输入数据
Y = y';                                                % 将y作为输出数据

% 模型训练
net = newff(X,Y,4,{'tansig','purelin'},'trainlm');     % 初始化BP神经网络
net.trainparam.goal = 0.0001;                          % 训练目标:均方误差低于0.0001
net.trainparam.show = 400;                             % 每训练400次展示一次结果
net.trainparam.epochs = 15000;                         % 最大训练次数:15000.
[net,tr] = train(net,X,Y);                             % 调用matlab自带的train函数训练网络

% 模型预测
py = sim(net,X);                                       % 调用matlab的sim函数得到网络的预测值
figure;                                                % 新建画图窗口窗口
t = 1:length(py);                                      % 数据的序号
plot(t,Y,'*',t,py,'o')                                 % 画图,对比原来的y和网络预测的y
legend('真实值','预测值')                              % 展示图例

代码运行结果如下:

可以看到,我们的BP神经网络的预测值与样本数据的真实值基本是一致的,说明我们的模型训练成功了。

2.3. 关键代码解说

好了,接下来我们看看关键代码。

(1) 训练代码

第8行是初始化一个BP神经网络,newff函数就是matlab里构建BP神经网络的函数了,newff函数第1、2个参数,就是我们的训练数据的X和Y了。然后第3个参数4代表隐节点个数,第4个参数{'tansig','purelin'}则代表第一个隐层用tanh函数,第二个隐层(即输出层)用purelin(y=x)函数,最后呢,我们选择了用trainlm算法进行训练,它所使用的就是LM列文伯格-马跨特算法进行训练,如果不设训练算法,那么默认也是用trainlm算法。

(其实matlab已经有新函数构建BP了,但大部分资料仍用newff,用新函数不易找资料,所以继续用newff就好了。)
第9-11行是设置一些训练参数。goal=0.0001代表误差达到0.0001时就会停止训练,show=400代表每训练400步就会展示一次结果,而epochs=15000就是最多训练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,例如想知道x1=1000,x2=2,x3=5时y的预测结果,那么就需要传入X=1000,2,5'。这里我们传入了所有X样本,最终就会得到所有X的预测结果。

16-19行就是画图了,就是画出真实Y与预测Y的散点图,没什么好说的。

结束语

以上就是BP神经网络的简单使用了。更详细可以参考:

【1】BP神经网络-简单例子

【2】BP神经网络-模型结构

【3】BP神经网络-训练算法

相关推荐
没落之王1 小时前
AI在文言文——论文脉复苏对AI的意义
大数据·人工智能·算法
司南-70491 小时前
AI infra 学习笔记(三):预处理·第一步——QKV 投影到底算了多少
人工智能·笔记·学习
龙亘川1 小时前
政法工作系统数字化建设实践解读:以全周期闭环驱动政法工作现代化
大数据·人工智能·智慧城市·开源软件·数据可视化
小宋10211 小时前
RAG 知识库也会被投毒:恶意文档、间接 Prompt Injection 与入库审核
人工智能·prompt
AI创界者1 小时前
Python 进阶:重构经典设计模式(六)—— 享元模式与单例模式在 Python 3.10+ 中的内存优化与线程安全演化
人工智能·aigc
茗创科技1 小时前
神经场+图网络捕获多模态频谱与脑动力学功能特性
神经网络·脑网络·数据处理·脑科学
honsor1 小时前
PoE温湿度传感器:一根网线供电+通信,即插即用,机房/配电室/仓库温湿度监测首选
运维·服务器·网络·数据库·人工智能·安全
u0111026751 小时前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
安睿杰翻译(上海)有限公司2 小时前
项目复盘|上海涉外项目翻译服务商选型评估清单,规避标书与注册文档风险
人工智能