【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:测试样本的预测输出。

步骤

  1. 初始化参数

    • 计算输入层和输出层神经元的个数。
  2. 数据归一化

    • 使用 mapminmax 对训练和测试数据进行归一化处理。
  3. 创建神经网络

    • 使用 newff 创建一个BP神经网络,设置隐含层神经元个数。
  4. 设置网络训练参数

    • 设定最大训练次数,训练目标误差和学习率。
  5. 初始化权值和阈值

    • 从输入参数 x 中提取初始权值和阈值,并赋值给网络。
  6. 训练神经网络

    • 使用训练数据训练网络。
  7. 测试神经网络

    • 用测试数据进行预测,并反归一化预测结果。
    • 计算预测误差。

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

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

相关文章

JMeter的基本使用与性能测试,完整入门篇保姆式教程

Jmeter 的简介 JMeter是一个纯Java编写的开源软件,主要用于进行性能测试和功能测试。它支持测试的应用/服务/协议包括Web (HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等。我们最常使用的是HTTP和HTTPS协议。 Jmeter主要组件 线程组&#xff08…

第五题(共享素数)

题目: from Crypto.Util.number import *flag flag{************}n1 1746971722529083908388605966002077274275237561715501834127389204779337274469841082126757807355155296052496366534644907775881406840930629941212123089008724399493406942466443295217…

Flutter Android 调试桥 (adb)

客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。 守护程序adbd:用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。 服务器:用于管理客户端与守护程序之间的通信。服务器在开…

Ubuntu常见命令解释

编译类命令 sudo ./configure/sudo make/sudo make install 参考博客这几条命令常见于安装 sudo./configure 命令就是执行当前目录名为configure的脚本,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足安装软件的依赖关系。 sudo make 命…

移动端的HSR技术

overdraw问题: overdraw顾名思义就是过度绘制,就是在渲染过程中**绘制一帧FBO(或者RenderTarget)**超过一次相同像素的现象!这个是CG的问题!特别在是用来大量的透明混合的情况下会产生的,当然客户端andrio…

mysql分析常用锁、动态监控、及优化思考

这里写自定义目录标题 1.未提交事物,阻塞DDL,继而阻塞所有同表的后续操作,查看未提交事务的进程2.存着正在进行的线程数据。3.根据processlist表中的id杀掉未释放的线程4.查看正在使用的表5.mysql为什么state会有waiting for handler commit6.什么情况导…

jetson nano + IMX219采raw图

研究了一圈,想直接采集raw图,很难。淘宝上直接买的模组,几乎都是直接出isp过后的图,至少有个去马赛克的过程,这就很难采raw了。淘宝上几乎是只能定制。想不到,不需要isp功能的相机模组反而非常难找。通过开…

【深度学习】交叉熵和MSE的理解

先说结论: 原来,他们与维度无关, 只要维度合适,都能计算。哈哈哈哈 测试代码: model Net(10,128,Config.num_output_feat)inputs torch.randn(3,5,10)res model(inputs)# 3X5print(res)label torch.randn(3,5)# lo…

高效开发与调试 RK3568 上的 Android 11:全面指南

目录 介绍环境准备1. 硬件准备2. 软件准备 环境搭建1. 下载并编译 Android 11 源码2. 烧写 Android 11 到 RK3568 高效开发与调试1. 使用 ADB 进行调试USB 连接无线调试 2. 使用 Android Studio 进行开发与调试配置 Android Studio使用 Logcat 查看日志断点调试 3. 使用其他工具…

【Android面试八股文】你能说说View的绘制流程是从Activity的哪个生命周期方法开始执行的?

文章目录 View绘制流程与Activity生命周期详细代码解释总结View绘制流程与Activity生命周期 在Android中,View的绘制流程确实与Activity的生命周期密切相关。 具体来说,视图的绘制通常会在onResume()之后开始,这意味着绘制过程正式启动是在Activity的onResume()方法完成后…

mysql数据库中给表创建数据

mysql数据库中给表创建数据 1、操作流程 1、连接数据库 2、拿到查询游标 3、创建sql 4、运行sql 5、关闭游标2、通用代码 import pymysqldef createData(dataDict,tableName):"""给数据表创建数据:param dataDict: 字典:param tableName: 表名:return: "…

intouch的报警怎么发到企业微信机器人

厂务报警通知系列博客目录 intouch的报警怎么发到微信上 intouch的报警怎么发到邮件上 intouch的报警怎么发到短信上 intouch的报警怎么发到企业微信机器人 intouch的报警怎么发到飞书机器人 intouch的报警怎么用语音通知到手机用户 创建企业微信群机器人 打开企业微信客…

【AI-6】算力和带宽

上述为大模型训练的显卡选项 tensor fp16 算力是什么? Tensor FP16(Float16)算力是指GPU在执行深度学习的张量计算时,使用float16(半精度浮点)数据类型所能达到的性能指标。 为什么要使用Tensor FP16? 提升计算效率: float16数据类型的存储和计算开销比float32…

网格布局之跨行越列

网格布局之跨行越列 欢迎关注:xssy5431 小拾岁月 参考链接:https://mp.weixin.qq.com/s/xStfSmewncTW49N0Y_Vhow 点击查看 使用场景 在常见的页面布局中,我们往往会遇到那种类似合并单元格的布局。比如:成绩排名、产品排名等等…

食品安全管理员题库

31.获准使用绿色食品标志的产品,( )加贴绿色食品标志防伪标签。 A.必须 B.自愿 答案:A 32.绿色食品生产企业重新通过产品认证,可继续使用绿色食品标志,标志上的编号( )。 A.不变 B.需要更…

第10关:视图1 、第11关:视图2 、第12关:用户。

目录 第10关:视图1 任务描述 知识补充 答案 第11关:视图2 任务描述 知识补充 答案 第12关:用户 任务描述 知识补充 答案 本篇博客声明:所有题的答案不在一起,可以去作者博客专栏寻找其它文章。 第10关&…

计算机网络(物理层)

物理层 物理层最核心的工作内容就是解决比特流在线路上传输的问题 基本概念 何为物理层?笼统的讲,就是传输比特流的。 可以着重看一下物理层主要任务的特性 传输媒体 传输媒体举例: 引导型传输媒体 引导型传输媒体指的是信号通过某种…

调试器烧录失败的几种常见解决办法

目录 1. 检查接线、Keil配置是否正确 2. 降低下载速度 3. SWD引脚被禁用或被复用为其他功能 4. 使用CubeMX生成的工程,无法调试? 5. 能识别到芯片但是下载时弹出报错对话框(Command not supported) 6. 内部flash锁死&#x…

深入解析Linux Bridge:原理、架构、操作与持久化配置

一、引言 在计算机网络中,桥接技术扮演着至关重要的角色,它能够实现不同网络设备之间的数据交换与共享。Linux Bridge作为Linux内核提供的一种网络功能,允许用户通过软件方式将多个网络接口桥接在一起,形成一个透明的二层网络。本…

python的os包总结

Python 的 os 模块提供了一系列与操作系统交互的功能,使你可以使用Python代码来执行许多与操作系统相关的任务,比如文件和目录操作、环境变量处理、进程管理等。以下是对 os 模块的一些详细介绍和常见用法。 导入 os 模块 import os文件和目录操作 获…