matlab实现BP神经网络(完整DEMO)

news2024/11/13 15:04:24

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com


目录

一、BP神经网络Demo代码   

1.1 代码整体思路

1.2 BP神经网络Demo代码

二、运行结果   

2.1 拟合曲线  

2.2训练误差与预测误差

三、相关文章

3.1-BP的入门学习目录:老饼|BP神经网络-入门教程

3.2-BP的建模应用目录:老饼|BP神经网络-建模应用

3.3-不调用工具箱自实现BP神经网络:老饼|BP神经网络-BP算法重现


本文展示一个日常使用BP神经网络时用于参考的代码DEMO模板


一、BP神经网络Demo代码   

这里提供一个相对全面的DEMO作为模板,
方便日常使用BP神经网络时复制

1.1 代码整体思路

代码整体思路如下
1、生成数据                                                                                                   
2、设置一个三层的BP网络,并将隐节点设为3                                                
3、训练网络                                                                                                  
4、网络效果评估                                                                                           
(1) 打印训练数据、测试数据的平均绝对误差、平均绝对误差占比         
(2) 绘制训练数据、测试数据的拟合效果                                              
5、使用训练好的网络对数据进行预测                                                             

1.2 BP神经网络Demo代码

具体代码如下(matlab2018a亲测已通过)

clear all;
close all ;
%================原始数据====================
x1 = linspace(-3,3,100);                                                  % 在[-3,3]之间线性生成100个数据
x2 = linspace(-2,1.5,100);                                                % 在[-2,1.5]之间线性生成100个数据
X  = [x1;x2];                                                             % 将x1,x2作为输入数据
y1 = 10*sin(x1)+0.2*x2.*x2;                                               % 生成y1
y2 = 10*sin(x2)+0.2*x1.*x1;                                               % 生成y2
y  = [y1;y2];                                                             % y里包含两个输出y1,y2
setdemorandstream(88);                                                    % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
%==============网络训练 ============================
%使用用输入输出数据(X,y)建立网络,
%隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。
net = newff(X,y,3,{'tansig','purelin'},'trainlm');
%设置一些常用关键参数
net.trainparam.goal        = 0.00001;                                     % 训练目标:均方误差低于0.0001
net.trainparam.show        = 400;                                         % 每训练400次展示一次结果
net.trainparam.epochs      = 15000;                                       % 最大训练次数:15000.
net.divideParam.trainRatio = 0.7;                                         % 用于训练的数据比例
net.divideParam.valRatio   = 0.15 ;                                       % 用于验证过拟合的数据比例
net.divideParam.testRatio  = 0.15;                                        % 用于比例
net.trainparam.max_fail    = 6;                                           % 过拟合验证失败次数

[net,tr,net_y] = train(net,X,y);  % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回

% ===========网络效果评估==================================
% 提取训练数据与测试数据                                                
train_net_y = net_y(:,tr.trainInd);                                       % 训练数据的预测值
test_net_y  = net_y(:,tr.testInd);                                        % 测试数据的预测值
train_y     = y(:,tr.trainInd);                                           % 训练数据的真实值
test_y      = y(:,tr.testInd);                                            % 测试数据的真实值

% 计算误差                                                              
train_err      = mean(abs(train_net_y(:)-train_y(:)))                     % 训练数据的误差
test_err       = mean(abs(test_net_y(:)-test_y(:)))                       % 测试数据的误差
train_err_rate = mean(abs((train_net_y(:)-train_y(:))./train_y(:)))       % 训练数据的误差比
test_err_rate  = mean(abs((test_net_y(:)-test_y(:))./test_y(:)))          % 测试数据的误差比

% 绘制拟合曲线图
figure
[out_size,sample_num] = size(y);  % 输出的个数,样本个数
for i = 1 : out_size
    % 绘制训练数据第i个输出的拟合效果
    subplot(out_size,2,(i-1)*2+1);
    title(['训练数据-第',num2str(i),'个输出的拟合效果'])
    hold on 
    plot(1:size(train_y,2),train_y(i,:),'b')
    plot(1:size(train_net_y,2),train_net_y(i,:),'r')
    % 绘制测试数据第i个输出的拟合效果
    subplot(out_size,2,(i-1)*2+2);
    title(['测试数据-第',num2str(i),'个输出的拟合效果'])
    hold on 
    plot(1:size(test_y,2),test_y(i,:),'b')
    plot(1:size(test_net_y,2),test_net_y(i,:),'r')
end 

%=============网络对新输入的使用==========================
sim_y = sim(net,X);               % 实际与上面的net_y一致
以上就是一个完整的matlab实现BP神经网络Demo代码了
 使用时主要修改的有方法
 👉 1. 建模的数据                                    
👉 2. 隐节点的个数                               
👉 3. 训练参数根据需要进行选择悸修改 


二、运行结果   

运行结果如下

2.1 拟合曲线
  


2.2训练误差与预测误差

从结果可以看到,训练数据效果和测试数据效果都不错

三、相关文章

3.1-BP的入门学习目录:老饼|BP神经网络-入门教程

3.2-BP的建模应用目录:老饼|BP神经网络-建模应用

3.3-不调用工具箱自实现BP神经网络:老饼|BP神经网络-BP算法重现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中大型连锁企业如何以数字化驱动业务创新增长

随着互联网、IT技术的发展,数字化转型逐渐成为时代发展的浪潮,对于中大型连锁企业而言,抓住机遇、创新增长是企业发展的关键。面对新的市场形势,企业需要让线上数据流动起来,解决业务数据的运力和流通问题,…

第6章 静态代理

第6章 静态代理 把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。 ​ 所以在实际应用中,我们将静态资源比如图片、css、html、js等交…

什么是企业内容管理?

为什么出现企业内容管理? 在数字经济的宏观背景下,企业建立了各种应用系统以满足企业各业务的管理需求,这些系统每天都在产生大量的数据和信息资源,但在企业实践中存在很多数据或资源无法被应用系统获取、处理和共享。 比如发票…

电力需求侧管理系统是什么?

摘要:电力是国民经济和居民生活的命脉,为贯彻落实国家对于节能减排工作的总体部署,深入推进电力需求侧管理工作、本文从电力需求侧能效管理平台所要实现的功能与应用信息技术两个方面,着重介绍平台研究建立的节电效益计算分析模型…

CSO面对面丨对话海通证券,探讨数字金融行业安全运营

新技术的涌现带动了金融行业的数字化转型发展,同时也带来了更多安全挑战。一方面,金融科技大量采用新技术实现业务创新的同时,也给网络安全带来了更多隐性风险。另一方面,金融行业数字化转型的进一步普及,大量个人隐私…

Express 创建和使用render

1 创建项目 npm install -g express-generator express -e myapp //创建myapp项目npm i //安装依赖npm i nodemon -D //安装nodemon 修改package.json "scripts": {"start": "node ./bin/www","dev": "nodemon ./bin/www&quo…

接入sentry安装@sentry/webpack-plugin依赖报错(附遇到的其他小问题)

背景 项目需要接入sentry,使用的是vue2 vue-cli构建的,那么需要使用webpack构建的方式 见sentry官方文档 问题和尝试思路 根据文档安装sentry/webpack-plugin依赖的时候一直失败 出现两种报错 第一种:下载安装包https://downloads.sent…

C++跨平台开发工具CLion——使用任意编译器快速指南

CLion是一款专为开发C及C所设计的跨平台IDE,它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C,同时它还使用智能编辑器来提高代码质量、自动代码重构并且…

【Nginx基础篇】nginx的基本配置解析和应用场景

目录 一、最小配置 二、虚拟主机 一、最小配置 原始的配置文件 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }…

【前后端分离项目】搭建前后端分离项目框架(vue前端)

创建项目文件夹 创建文件夹(框架),可以在里面增加页面实现自己的需求。 在官网下载nodejs 官网地址:https://nodejs.org/en nodejs中自带了npm包,npm负责管理依赖,将nodejs下载完成后,即可使…

开关电源基础04:新型开关电源拓扑(1)-拓扑的改进

说在开头:关于互补原理 玻尔在挪威滑雪之余好好的思考了波粒问题,并逐渐完善了这个新想法;当他看到海森堡的论文时,自然而然地用这种想法去印证整个结论。他问海森堡:这种不确定性是从粒子的本性而来,还是…

软件架构:构建软件架构SOA

Web服务一种作为炙手可热的技术,应用到企业的IT系统和商业流程之中,并给企业带来直接的经济效益,一直以来得到了国内外企业管理者的推崇。而在近两年,伴随着企业需求的不断变化,一种被誉为Web服务的技术架构&#xff0…

【Flowable】Flowable任务分配和流程变量

1.任务分配 (1).固定分配 固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式 (2).表达式分配 Flowable使用UEL进行表达式解析。UEL代表Unified Expression Language,是EE6规范的一部分.Flowable支持两种UEL表…

基于云平台的光伏监控系统是怎样的?

摘要:针对国内光伏发电监控系统的研究现状,文中提出了基于云平台的光伏发电监控体系。构建基于B/S架构的数据实时采集与推送,以SSH(strutsspringhibernate)作为Web开发框架,开发基于云平台的光伏发电远程监控系统。在平台部署过程…

开关电源基础04:新型开关电源拓扑(2)-新型电源拓扑

说在开头:关于量子理论 我们再来回顾下量子理论对双缝干涉的解释:当电子通过狭缝,假如我们采用任其自然的观测方式,让它不受干扰地在空间中传播,这时候电子的波动性就占据了上风,它于是以某种方式同时穿过…

农业机器人技术栈

结构光 https://www.youtube.com/watch?vmSsnf5tqXnA 局部路径规划算法 光流法 统计像素 分辨前景背景 绿色是我们比较关注的 unet做图像分割 运动比较剧烈的是前景 特征点匹配 大豆农田点云建图 农田路况复杂 光流计算量比较大,可以捕捉运动比较大的物体 分割检…

ChatGPT直接访问,Edge浏览器-免费ChatGPT保姆级教程

人工智能大浪潮已经来临,对于ChatGPT,我觉得任何一个玩互联网的人,都应该重视起来,用起来。但是国内使用需要解决科学上网、注册、收费等繁琐问题。 所以,今天这篇文章就来推荐一个插件,无需任何繁琐操作&…

日撸 Java 三百行day48

文章目录 说明day48 堆排序1.基本思路2.代码 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampledata day48 堆排序 1.基本…

【虚幻引擎】UE5 C++编译和打包失败的原因

一、出现The required library hostfxr.dll could not be found 错误 原因是缺少.NET Core3.1 解决办法一:可以去官网下载https://dotnet.microsoft.com/en-us/download/dotnet/3.1 解决方案二:打开Visual Studio Installer,选择单个组件&…

计算机Intel CPU体系结构分析

前段meldown漏洞事件的影响,那段时间也正好在读Paul的论文关于内存屏障的知识,其中有诸多细节想不通,便陷入无尽的煎熬和冥想中,看了**《计算机系统结构》、《深入理解计算机系统》、《大话处理器》**等经典书籍,也在g…