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

本站原创文章,转载请说明来自《老饼讲解-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算法重现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript经典教程(七)-- JavaScript初级

190:JavaScript初级内容 - DOM查询、插入内容、赋予样式等 1、DOM操作 DOM:节点,也就是html中的元素; DOM操作:其实就是节点元素的方法; (1)innerHTML - 返回元素内容 同时也可以…

关于maven

一、maven是什么 一个java项目构建工具 二、maven的作用 (1)依赖管理 不同框架整合,互相依赖jar包版本不同,版本不一样,程序跑起来就会报错。用maven管理jar包。 (2)跨平台构建项目 linux服…

数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)

目录 最大堆的建立 方法1 方法2 思路图解 代码实现 代码解释 PercDown BuildHeap 最大堆的建立 建立最大堆:将已经存在的N个元素按最大堆的要求存放在一个一维数组中。 方法1 通过插入操作,将N个元素一个一个地插入到一个初始为空的堆中去。…

简述对象检测与图像分类与关键点检测区别

计算机视觉是人工智能的一个多元化领域,旨在检测和识别图像或视频的内容。大多数开始计算机视觉领域之旅的人的常见问题之一是:目标检测、图像分类和关键点检测之间有什么区别? 让我们先看看 什么是对象检测 对象检测是一种计算机视觉和图像…

excel中英文互译

在excel运行宏时弹出下面的提示: 无法运行“XXXXX”宏。可能是因为该宏在此工作薄中不可用,或者所有的宏都被禁用的错误提示 解决办法: 1、点击“文件”选项卡; 2、在选项卡界面窗口中选择“选项”按钮; 3、在“选项…

JavaScript实现在键盘输入按键,浏览器进行显示的代码

以下为实现在键盘输入按键,浏览器进行显示的代码和运行截图 目录 前言 一、在键盘输入按键,浏览器进行显示 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找&#xf…

智能汽车实验二(视觉传感器标定)

实验二 视觉传感器标定(实验报告) 【实验目的】 1、了解开源图像处理库OpenCV的结构,掌握OpenCV的基本使用方法。 2、了解开源图像处理库OpenCV的基本模块功能,掌握常用图像处理方法。 3、掌握摄像机标定算法,学会使用…

igraph的layout布局

做图论的社区检测,需要画图显示,用igraph可以进行可视化。 igraph有几个布局,分别如下: layout_with_dh : The Davidson-Harel layout algorithm Place vertices of a graph on the plane, according to the simulat…

113-Linux_安装c/c++开发库及连接mysql数据库

文章目录 一.安装c/c开发库二.连接mysql数据库三.用户的管理与授权 mysql数据库的安装 一.安装c/c开发库 安装开发c/c的库&#xff0c;命令&#xff1a;apt install libmysqlclient-dev 二.连接mysql数据库 #include<stdio.h> #include<mysql/mysql.h>void fun…

Python+Selenium4环境搭建

set集合 怎么把列表种相同的数据和不同的数据取出来 1.把列表转为set集合 2.按照集合的交集 selenium 自动化测试&#xff1a;自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB&#xff08;APP&#xff09;来进行操作。 QTP (HP公司)&#xff1a;以录制回放的模式…

CSS进阶

01-复合选择器 定义&#xff1a;由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 作用&#xff1a;更准确、更高效的选择目标元素&#xff08;标签&#xff09;。 后代选择器 后代选择器&#xff1a;选中某元素的后代元素。 选择器写法&#xff1a;父选择器 …

学系统集成项目管理工程师(中项)系列19b_成本管理(下)

1. 成本估算 1.1. 编制完成项目活动所需资源的大致成本 1.2. 在设计阶段多做些额外的工作可能减少执行阶段和产品运行时的成本 1.3. 项目估算的准确性随着项目的进展而提高 1.3.1. 【19下选48】 1.4. 针对完成活动所需资源的可能成本进行的量化评估 1.5. 容易被忽视的主要…

华为pbr双出口外线,指定内网单个vlan绑定单个出口外线上网

公司两条外线&#xff0c;vlan 10用nat走上面转发出去上网&#xff0c;vlan 20 走下面那条外线出去nat上网 AR2&#xff1a; interface GigabitEthernet0/0/0 ip address 6.6.6.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 154.1.2.3 255.255.255.0 interface…

JavaScript通过js的方式来判断一个数奇偶性的代码

以下为通过js的方式来判断一个数奇偶性的程序代码和运行截图 目录 前言 一、通过js的方式来判断一个数奇偶性&#xff08;html部分&#xff09; 1.1 运行流程及思想 1.2 代码段 二、通过js的方式来判断一个数奇偶性&#xff08;js部分&#xff09; 2.1 运行流程及思想 2…

Linux操作系统如何查看CPU型号信息?一条命令搞定

Linux操作系统服务器如何查看CPU处理器信息&#xff1f;使用命令cat /proc/cpuinfo可以查看CPU详细信息&#xff0c;包括CPU核数、逻辑CPU、物理CPU个数、CPU是否启用超线程等&#xff0c;阿里云服务器网分享Linux服务器查看CPU信息命令&#xff1a; 目录 Linux服务器查看CPU…

2023年贵州省职业技能大赛“网络安全” 项目比赛任务书

2023年贵州省职业技能大赛“网络安全” 项目比赛任务书 三、竞赛任务书内容 &#xff08;一&#xff09;拓扑图 &#xff08;二&#xff09;A模块基础设施设置/安全加固&#xff08;200分&#xff09; 一、项目和任务描述&#xff1a; 假定你是某企业的网络安全工程师&…

【Linux】Linux安装Redis(图文解说详细版)

文章目录 前言第一步&#xff0c;下载安装包第二步&#xff0c;上传安装包到/opt下&#xff08;老规矩了&#xff0c;安装包在opt下&#xff09;第三步&#xff0c;解压安装包第四步&#xff0c;编译第五步&#xff0c;安装第六步&#xff0c;配置redis第七步&#xff0c;设置开…

迁移学习

迁移学习 什么是迁移学习 迁移学习【斯坦福21秋季&#xff1a;实用机器学习中文版】 迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习方法&#xff0c;它通过将一个领域中的知识和经验迁移到另一个相关领域中&#xff0c;来加速和改进新领域的学习和解决问…

“土狗”的季节,meme热潮回归

文/章鱼哥 出品/陀螺财经 meme代币的热度好像又回来了&#xff0c;两周前推出的PEPE创下了历史新高。尽管加密货币市场仍处于漫长熊市中&#xff0c;但人们似乎仍然对风险投资保有兴趣。 meme代币作为基于互联网模因的高波动数字资产&#xff0c;似乎没有太多实用性。它们的价格…

AI仿写软件-仿写文章生成器

AI仿写软件&#xff1a;高效出色的营销利器 作为互联网时代的营销人员&#xff0c;我们不仅需要品牌意识&#xff0c;还必须深谙营销技巧。万恶的时限压力使得我们不得不在有限的时间内输出更多的文本内容&#xff0c;以便吸引更多的关注。那么&#xff0c;如何解决这个问题呢…