【Matlab】-- BP反向传播算法

文章目录
文章目录
- 00 写在前面
- 01 BP算法介绍
- 02 基于Matlab的BP算法
- 03 代码解释
00 写在前面
BP算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化算法一起,进行回归预测或者分类预测。
01 BP算法介绍
BP(Backpropagation,反向传播)算法是一种用于训练人工神经网络的监督学习算法。它是基于梯度下降法,通过反向传播误差来调整网络的权值和阈值,以最小化输出误差。BP算法是神经网络领域最经典和广泛使用的算法之一。
02 基于Matlab的BP算法
%% 输入
% x:一个个体的初始权值和阈值
% P_train:训练样本输入
% T_train:训练样本输出
% hiddennum:隐含层神经元数
% P_test:测试样本输入
% T_test:测试样本期望输出
%% 输出
% err:预测样本的预测误差的范数function [err,T_sim]=BpFunction1(x,P_train,T_train,hiddennum,P_test,T_test)
inputnum=size(P_train,2); % 输入层神经元个数
% hiddennum=2*inputnum+1; % 隐含层神经元个数
outputnum=size(T_train,2); % 输出层神经元个数%% 数据归一化
[p_train,ps_train]=mapminmax(P_train',0,1);
p_test=mapminmax('apply',P_test',ps_train);
[t_train,ps_output]=mapminmax(T_train',0,1);%% 开始构建BP网络
net=newff(p_train,t_train,hiddennum); %隐含层为hiddennum个神经元
%设定参数网络参数
net.trainParam.epochs=1000;
net.trainParam.goal=1e-3;
net.trainParam.lr=0.01;
net.trainParam.showwindow=false; %高版MATLAB使用 不显示图形框%% BP神经网络初始权值和阈值
w1num=inputnum*hiddennum; %输入层到隐层的权值个数
w2num=outputnum*hiddennum; %隐含层到输出层的权值个数
% x=2*rand(1,w1num+hiddennum+w2num+outputnum)-1; %随即生成权值
W1=x(1:w1num); %初始输入层到隐含层的权值
B1=x(w1num+1:w1num+hiddennum); %隐层神经元阈值
W2=x(w1num+hiddennum+1:w1num+hiddennum+w2num); %隐含层到输出层的权值
B2=x(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum); %输出层阈值
net.iw{1,1}=reshape(W1,hiddennum,inputnum); %为神经网络的输入层到隐含层权值赋值
net.lw{2,1}=reshape(W2,outputnum,hiddennum); %为神经网络的隐含层到输出层权值赋值
net.b{1}=reshape(B1,hiddennum,1); %为神经网络的隐层神经元阈值赋值
net.b{2}=reshape(B2,outputnum,1); %为神经网络的输出层阈值赋值%% 开始训练
net = train(net,p_train,t_train);%% 测试网络
t_sim = sim(net,p_test);
T_sim = mapminmax('reverse',t_sim,ps_output); %反归一化
T_sim=T_sim';
err=norm(T_sim-T_test); %预测结果与测试结果差的范数,范数越小说明预测得越准确,如果范数为0,说明预测得完全准确
03 代码解释
输入参数
x:一个包含神经网络初始权值和阈值的向量。P_train:训练样本的输入数据。T_train:训练样本的输出数据。hiddennum:隐含层神经元的个数。P_test:测试样本的输入数据。T_test:测试样本的期望输出。
输出参数
err:预测误差的范数。T_sim:测试样本的预测输出。
步骤
-
初始化参数:
- 计算输入层和输出层神经元的个数。
-
数据归一化:
- 使用
mapminmax对训练和测试数据进行归一化处理。
- 使用
-
创建神经网络:
- 使用
newff创建一个BP神经网络,设置隐含层神经元个数。
- 使用
-
设置网络训练参数:
- 设定最大训练次数,训练目标误差和学习率。
-
初始化权值和阈值:
- 从输入参数
x中提取初始权值和阈值,并赋值给网络。
- 从输入参数
-
训练神经网络:
- 使用训练数据训练网络。
-
测试神经网络:
- 用测试数据进行预测,并反归一化预测结果。
- 计算预测误差。
相关文章:
【Matlab】-- BP反向传播算法
文章目录 文章目录 00 写在前面01 BP算法介绍02 基于Matlab的BP算法03 代码解释 00 写在前面 BP算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化算法一起,进行回归预测或者分类预测。 01 BP算法介绍 BP(Backpropag…...
【Python】 数据分析中的常见统计量:众数
那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 🎵 王心凌《那年夏天宁静的海》 众数(Mode)是统计学中另…...
Karabiner-Elements 设置mac键盘
软件下载地址: Karabiner-Elements 修改键盘位置,但是重启后,就消失了。 {"description": "New Rule (change left_shiftcaps_lock to page_down, right_shiftcaps_lock to left_commandmission_control)","manip…...
Mybatis实现流程
一,UserDAO 接口定义 首先,定义 UserDAO接口,包含 getList()方法,定义类型为List<User>: package dao;import model.User; import java.util.List;public interface UserDAO {List<User> getList(); }二,…...
简单的springboot整合activiti5-serviceImpl部分(1)
简单的springboot整合activiti5.22.0-serviceImpl部分(1) 原来的流程serviceImpl部分代码过多,所以此处单独记录一下,此处记录的是serviceImpl第一部分代码 package cn.git.workflow.service.impl;import cn.git.cache.api.BaseCacheApi; import cn.gi…...
snat、dnat和firewalld
目录 概述 SNAT源地址转换 DANT目的地址转换 抓包 firewalld 端口管理 概述 snat :源地址转换 内网——外网 内网ip转换成可以访问外网的ip 也就是内网的多个主机可以只有一个有效的公网ip地址访问外部网络 DNAT:目的地址转发 外部用户&#…...
[数据集][目标检测]鸡蛋缺陷检测数据集VOC+YOLO格式2918张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2918 标注数量(xml文件个数):2918 标注数量(txt文件个数):2918 标注…...
前后端防重复提交
数据重复提交是一个大忌,会带来无效数据,应该在前端和后端都建议检测防范。 前端一般是按钮按下触发数据提交,如果用户鼠标操作习惯不好,或者鼠标或系统设置问题会导致鼠标连击,如果前端不做相关处理,可能会…...
JVM专题八:JVM如何判断可回收对象
在JVM专题七:JVM垃圾回收机制中提到JVM的垃圾回收机制是一个自动化的后台进程,它通过周期性地检查和回收不可达的对象(垃圾),帮助管理内存资源,确保应用程序的高效运行。今天就让我们来看看JVM到底是怎么定…...
binary_cross_entropy_with_logits函数的参数设定
binary_cross_entropy_with_logits 该函数参数: logits (Tensor) - 输入预测值。其数据类型为float16或float32。 label (Tensor) - 输入目标值,shape与 logits 相同。数据类型为float16或float32。 weight (Tensor,可选) - 指定每个批次二…...
Python 面试【★★★★★】
欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
C# StringBuilder
以下是一些基本的 StringBuilder 使用方法:创建 StringBuilder 实例:追加字符串:插入字符串:删除字符串:替换字符串:清空 StringBuilder:转换 StringBuilder 为字符串:使用容量&…...
4个文章生成器免费版分享,让文章创作更轻松便捷
在当今这个信息飞速传播的时代,文章创作的重要性愈发凸显。无论是从事内容创作的专业人士,还是偶尔需要撰写文章的普通大众,都希望能更高效地完成文章创作任务。而在实际操作中,我们常常会遇到思路卡顿、没有创作灵感的问题。今天…...
redis-cluster(集群模式搭建)
redis中间件版本: redis-5.0.5环境介绍 这里使用服务器数量3,分别为172.0.0.1,172.0.0.2,172.0.0.3,每台机器redis节点数量2个,共6个redis节点构成redis-cluster模式。编译安装包 在172.0.0.1的机器上进入安装目录 cd …...
使用vite官网和vue3官网分别都可以创建vue3项目
问: npm init vitelatest 和 npm create vuelatest创建的vue3项目有什么区别? 回答: npm init vitelatest 和 npm create vuelatest 分别是使用 Vite 和 Vue CLI 工具创建 Vue 项目的两种方式,它们之间有几个主要区别: 1. **构建工具:** …...
PDF处理篇:如何调整 PDF 图像的大小
将视觉效果无缝集成到 PDF 中的能力使它们成为强大的通信工具。然而,笨拙的图像大小会迅速扰乱文档的流程,阻碍清晰度和专业性。幸运的是,GeekerPDF 和Adobe Acrobat等流行的应用程序提供了用户友好的解决方案来应对这一挑战。这个全面的指南…...
STM32 HAL库里 串口中断回调函数是在怎么被调用的?
跟着正点原子学习的HAL库写串口接收程序的时候一直有困惑,使用HAL_UART_Receive_IT开启接收中断后,为啥处理函数要写在HAL_UART_RxCpltCallback里,中断发生的时候是怎么到这个回调函数里去的? void MX_USART1_UART_Init(void) {h…...
音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析
音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...
RT-Thread ENV-Windows v2.0.0安装教程
前言 前几天RT-Thread官方更新了env工具,开源仓库的Kconfig的写法都不大一样了;如果继续用原来的env工具,拉新代码之后很多示例都编译不了 在最新的env工具中menuconfig全面采用kconfiglib,升级env脚本和python版本,改…...
[HBM] HBM TSV (Through Silicon Via) 结构与工艺
依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 全文 3300 字。 1 概念 1.1 什么是HBM TSV 使用 TSV 堆叠多个DDR DRAM成为一块HBM, 成倍提高了存储器位宽, 一条位宽相当于高速公路的一条车道, 车道越多ÿ…...
矢量网络分析仪(VNA)校准实战:从原理到操作全解析
1. 矢量网络分析仪校准的核心原理 第一次接触矢量网络分析仪(VNA)时,我完全被那些复杂的S参数曲线搞懵了。直到老师傅告诉我:"VNA就是个高级照妖镜,校准就是给它配副好眼镜"。这个比喻让我恍然大悟——没有校…...
算法高频核心:网格方向遍历从入门到精通
摘要:二维网格方向遍历是算法笔试、面试绝对高频考点,覆盖井字棋、五子棋、岛屿统计、单词搜索、游戏模拟等场景。本文用一套通用方向数组模板,打通 4 方向 / 8 方向遍历、k 连珠判定、DFS 连通块、回溯搜索四大题型,附完整可运行 C++ 代码与 LeetCode 原题对照,新手也能快…...
突破语言壁垒:XUnity.AutoTranslator让Unity游戏翻译不再复杂
突破语言壁垒:XUnity.AutoTranslator让Unity游戏翻译不再复杂 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 一、游戏语言困境:玩家面临的真实挑战 想象一下,你终于等…...
不只是改IP:群晖Docker版与套件版Gitea配置迁移与地址变更全攻略
群晖NAS上Gitea部署方案对比与地址变更深度指南 在私有云和代码托管领域,群晖NAS凭借其稳定的硬件性能和丰富的软件生态,成为许多开发者和技术团队搭建私有Git服务的首选平台。Gitea作为轻量级的自托管Git服务,因其简洁高效的特点,…...
5步掌握戴森球计划工厂蓝图:从新手到自动化大师的实战指南
5步掌握戴森球计划工厂蓝图:从新手到自动化大师的实战指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 戴森球计划工厂蓝图是构建高效星际生产体系的关键工具…...
告别手动输入!SQLPlus非交互模式执行SQL脚本的3种高效方法(附实例)
告别手动输入!SQLPlus非交互模式执行SQL脚本的3种高效方法(附实例) 在数据库管理和开发工作中,频繁执行SQL脚本是家常便饭。想象一下这样的场景:每天凌晨需要生成报表、定期执行数据清洗任务、或者批量更新生产环境数据…...
从PaddlePaddle 2.2.2平滑升级到2.4.2的实战指南
1. 升级前的准备工作 在开始升级PaddlePaddle之前,我们需要做好充分的准备工作。首先检查当前环境,确保系统满足升级要求。我建议创建一个新的Python虚拟环境来隔离升级过程,这样可以避免影响其他项目。使用conda创建环境的命令如下ÿ…...
如何快速掌握Monaco Editor代码模板变量默认值导入的完整指南
如何快速掌握Monaco Editor代码模板变量默认值导入的完整指南 【免费下载链接】monaco-editor A browser based code editor 项目地址: https://gitcode.com/gh_mirrors/mo/monaco-editor 想要在Web应用中实现像VS Code一样强大的代码编辑器体验吗?Monaco Ed…...
Rivets.js格式化器深度解析:自定义数据转换和业务逻辑处理
Rivets.js格式化器深度解析:自定义数据转换和业务逻辑处理 【免费下载链接】rivets Lightweight and powerful data binding. 项目地址: https://gitcode.com/gh_mirrors/ri/rivets Rivets.js是一个轻量级且功能强大的数据绑定库,它提供了灵活的格…...
GHelper开源工具深度评测:如何为华硕笔记本实现轻量化硬件控制
GHelper开源工具深度评测:如何为华硕笔记本实现轻量化硬件控制 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...
