BP神经网络-入门到理解-长文讲述

本文来自:老饼讲解-BP神经网络 https://www.bbbdata.com

目录

一、BP神经网络的仿生意义

二、BP神经网络的结构

三、BP神经网络的前馈与后馈

3.1 BP神经网络的前馈

3.2 什么是BP神经网络的后馈

四、BP神经网络的训练

4.1 BP神经网络归一化

4.2 梯度下降算法求解BP神经网络

五、用matlab工具箱实现BP神经网络

5.1 问题阐述

5.2 matlab实现BP神经网络代码


一、BP神经网络的仿生意义

BP神经网络的设计思路是什么呢?它借鉴于人脑的工作原理
在人的眼睛看到符号“5”的后,大脑将判别出它是5
 

BP神经网络的仿生思想


BP正是要模仿这个行为,把这个行为过程简单拆分为: 
  (1)  眼睛接受了输入                    
  (2)  把输入信号传给其它脑神经元        
  (3)  脑神经元综合处理后,输出结果为5   

我们都知道, 神经元与神经元之间是以神经冲动的模式进行传值,信号到了神经元,都是以电信号的形式存在,当电信号在神经元积累到超过阈值时,就会触发神经冲动,将电信号传给其它神经元。正是根据这个思路,就构造出了以上的神经网络结构。 

   

二、BP神经网络的结构

BP的通用结构如下

BP神经网络模型

  
在通用结构中,包含了输入层、隐层和输出层,隐层和输出层的神经元都有自己的阈值和激活函数
它属于前馈型神经网络,即神经元是层层连接、逐层向前传递

BP神经网络的传递函数最基本、最常用的传递函数有tansig、logsig和purelin函数,BP神经网络的传递函数也称为激活函数,本文介绍这三个传递函数的一些性质

三、BP神经网络的前馈与后馈

3.1 BP神经网络的前馈

正向传播(前馈)是指BP神经网络的输出计算过程是前馈的,
即计算完一层,得到结果,再以该层的结果作为下层的输入,计算下一层

 用网络的输入计算第一层的输出,
把第一层的输出作为第二层的输入,计算第二层的输出
把第二层的输出作为第三层的输入,计算第三层的输出
....
直到最后一层的输出,就是网络的输出
一般说BP神经网络的前馈、向前传播等等,实际说的就是"BP神经网络输出的计算过程"

3.2 什么是BP神经网络的后馈

反向传播指的是BP神经网络计算参数的梯度时的计算方式
由于BP神经网络求解时所使用的是梯度下降算法(或其他算法),这些算法一般都需要利用误差函数对参数的梯度
因此,计算梯度是BP神经网络训练中重要的一部分,而反向传播式地计算梯度就是BP神经网络的特色,
BP神经网络之所以叫BP(Back Propagation Neural Network)神经网络,指的正是它计算梯度时这种后馈的特色

BP神经网络是如何反向传播式计算梯度的,如下,是一个K层的BP神经网络:
 


四、BP神经网络的训练

4.1 BP神经网络归一化

BP神经网络归一化一般是指按公式将数据归一化到[-1,1]之间,
 

BP神经网络数据归一化


反归一化则是把归一化后的数据映射回原始数据,在训练阶段和应用阶段都涉及到数据归一化的相关处理 ,训练阶段需要在训练前把所有数据归一化后再进行训练
其中,归一化公式如下:

4.2 梯度下降算法求解BP神经网络

梯度下降求解BP神经网络的算法流程如下:
1. 先初始化W,b                                       
2. 按照梯度公式算出梯度                         
3. 将W和b往负梯度方向调整                    
4. 不断循环(1)(2)(3),直到达到终止条件  
终止条件为:达到最大迭代次数,或误差足够小

详细实现代码:

matlab实现BP神经网络的代码-不调用工具箱自己实现-老饼讲解

五、用matlab工具箱实现BP神经网络

5.1 问题阐述

现有数据如下
 

 x1, x2 为输入,y 为对应的输出,现需要训练一个网络,用 x1, x2 预测 y

5.2 matlab实现BP神经网络代码

通过代码,使用数据对上面的BP神经网络模型进行训练,下面是matlab2018a的代码实现

x1 = [-3,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,0.9,1.2,1.5,1.8];   % x1:x1 = -3:0.3:2;
x2 = [-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2];       % x2:x2 = -2:0.2:1.2;
y  = [0.6589,0.2206,-0.1635,-0.4712,-0.6858,-0.7975,-0.8040,...-0.7113,-0.5326,-0.2875 ,0,0.3035,0.5966,0.8553,1.0600,1.1975,1.2618];    % y: y = sin(x1)+0.2*x2.*x2;inputData  = [x1;x2];                                                               % 将x1,x2作为输入数据
outputData = y;                                                                     % 将y作为输出数据
setdemorandstream(88888);                                                           % 指定随机种子,这样每次训练出来的网络都一样。%使用用输入输出数据(inputData、outputData)建立网络,
%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');%设置一些常用参数
net.trainparam.goal = 0.0001;                                                        % 训练目标:均方误差低于0.0001
net.trainparam.show = 400;                                                           % 每训练400次展示一次结果
net.trainparam.epochs = 15000;                                                       % 最大训练次数:15000.
[net,tr] = train(net,inputData,outputData);                                          % 调用matlab神经网络工具箱自带的train函数训练网络simout = sim(net,inputData);                                                         % 调用matlab神经网络工具箱自带的sim函数得到网络的预测值
figure;                                                                              % 新建画图窗口窗口
t=1:length(simout);                                                                  
plot(t,y,t,simout,'r')                                                               % 画图,对比原来的y和网络预测的y

运行代码后得到训练数据的拟合效果图如下

 可以看到,对于训练数据,模型的预测与原始数据基本一致

上面已经得到训练好的模型,在新的x数据进来时,就可以借助网络,对y作出预测.

如果想知道 x1=0.5, x2=0.5时的值,可输入如下代码

x    =[0.5;0.5];     
simy = sim(net,x)

命令窗口输出如下
  

 这样,就得到了输入为 [0.5,0.5] 时,y的预测值.

以上就是一个BP神经网络的简单应用例子了~

相关链接:


《老饼讲解-机器学习》:老饼讲解-机器学习教程-通俗易懂

《老饼讲解-神经网络》:老饼讲解-matlab神经网络-通俗易懂

《老饼讲解-深度学习》:深度学习-Pytorch教程-pytorch入门

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

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

相关文章

完胜PSP的神器

小鸡模拟器,顾名思义,它是一个能够模拟多种经典游戏平台的软件,从家用游戏机到掌上游戏机,几乎覆盖了所有知名的老式游戏设备。这意味着,通过小鸡模拟器,我们可以在手机上重温那些陪伴我们度过童年时光的经…

springboot学习-图灵课堂-最详细学习

springboot-repeat springBoot学习代码说明为什么java -jar springJar包后项目就可以启动 配置文件介绍 springBoot学习 依赖引入 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>8</mav…

【教程】PVE下uhd630核显直通HDMI输出 以NUC9为例村雨Murasame

大家好&#xff0c;村雨本雨又来发教程了 最近在搞小主机&#xff0c;之前hp400g3仅仅200多元成功核显直通HDMI&#xff0c;作为简单NAS、解码机、伺服机、中控都非常棒&#xff0c;待机仅9w 村雨Murasame&#xff1a;【教程】7代核显直通HDMI成功输出画面 PVE下7代intel核显…

数仓中数据分层的标准流向解读

在大数据开发中&#xff0c;数据分层是一个至关重要的概念。合理的数据分层可以有效地提升数据处理的效率和质量。本文将详细介绍数据分层的标准流向和相关注意事项&#xff0c;并结合实际应用进行说明。 数据分层的标准流向 根据行业标准&#xff0c;数据分层的标准流向如下…

IOS开发学习日记(十五)

目录 App启动过程及生命周期 App的启动 UIApplication UIApplicationDelegate 通过App生命周期回调实现启动页 闪屏的实现 简单实现闪屏功能 App启动过程及生命周期 App的启动 main函数前 动态链接 / 二进制文件加载 / runtime / 类的加载 ...... main函数 int main(int…

事件驱动架构详解:触发与响应构建高效系统

目录 前言1. 事件驱动架构概述1.1 什么是事件1.2 事件驱动架构的核心概念 2. 事件驱动架构的实现2.1 基于消息队列的实现2.2 基于发布-订阅模式的实现2.3 基于流处理的实现 3. 事件驱动架构的优势3.1 松耦合性3.2 可扩展性3.3 异步处理3.4 灵活性 4. 事件驱动架构的应用场景4.1…

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送

svm和决策树基本知识以及模型评价以及模型保存

svm和决策树基本知识以及模型评价以及模型保存 文章目录 一、SVM1.1&#xff0c;常用属性函数 二、决策树2.1&#xff0c;常用属性函数2.2&#xff0c;决策树可视化2.3&#xff0c;决策树解释 3&#xff0c;模型评价3.1&#xff0c;方面一&#xff08;评价指标&#xff09;3.2&…

Android基于MediaBroswerService的App实现概述

mSession.setPlaybackState(mStateBuilder.build()); // 5. 关联 SessionToken setSessionToken(mSession.getSessionToken()); } } 根据包名做权限判断之后&#xff0c;返回根路径 Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundl…

如何生成protobuf文件

背景 protobuf是一种用于序列化结构数据的工具&#xff0c;实现数据的存储与交换&#xff0c;与编程语言和开发平台无关。 序列化&#xff1a;将结构数据或者对象转换成能够用于存储和传输的格式。 反序列化&#xff1a;在其他的计算环境中&#xff0c;将序列化后的数据还原为…

Vue3.4新增的defineModel的使用

define-model的作用 在3.3及之前的版本&#xff0c;父子组件之间的通讯&#xff0c;一直都是靠props&#xff08;父传子&#xff09;和emit&#xff08;子传父&#xff09;来实现。而define-model整合了这两种方法&#xff0c;只需要在父组件中定义define-model的方法&#xf…

GIT回滚

1. 使用 git revert git revert 命令会创建一个新的提交&#xff0c;这个提交会撤销指定提交的更改。这通常用于公共分支&#xff08;如 main 或 master&#xff09;&#xff0c;因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …

Net开源项目推荐-WPF控件样式篇

Net开源项目推荐-WPF控件样式篇 HandyControlWPFDeveloperswpf-uidesignLive-ChartsAvalonDock HandyControl WPF控件库,比较常用的WPF开源控件库&#xff0c;对WPF原有控件样式都进行了重写和扩展&#xff0c;也增加了许多特别的控件&#xff0c;非常好用 github仓库&#x…

Day14—基于Langchain-chatchat搭建本地智能

一、基于Langchain-chatchat搭建本地智能 知识问答系统 1、项目介绍 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现&#xff0c;开一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知…

Claude3.5:编码螃蟹游戏就是这么轻松

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则…

爱眼小妙招:台灯怎么选?学生如何正确使用台灯?

视力是心灵的窗户&#xff0c;尤其对于儿童来说更为重要。然而&#xff0c;随着现代生活方式的改变&#xff0c;孩子们面临越来越多的视力挑战。据统计&#xff0c;在近视学生中&#xff0c;近10%的人患有高度近视&#xff0c;而这一比例随年级的增加而逐渐上升。从幼儿园的小小…

电子杂志制作工具推荐:让你轻松成为编辑大人

在这个数字化的时代&#xff0c;电子杂志已经成为信息传播的重要载体。它不仅能够满足人们对阅读的需求&#xff0c;还能够提供更加丰富、互动的阅读体验。因此&#xff0c;掌握一款好用的电子杂志制作工具&#xff0c;已经成为每个编辑大人的必备技能。接下来告诉大家一个超简…

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…

计算机系统基础(一)

1. 引入——从源程序到可执行文件 了解高级语言编写的代码在后台是如何被编译并运行的 首先我们会编写一段代码&#xff0c;例如 #include<stdio.h>int main(){printf("hello world!\n");return 0; } 并把它命名为hello.c文件 预处理阶段 接下来通过命令…

WPF/C#:在DataGrid中显示选择框

前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求&#xff0c;今天跟大家分享一下&#xff0c;在自己的项目中是如何实现的。 整体实现效果如下&#xff1a; 如果对此感兴趣&#xff0c;可以接下来看具体实现部分。 实践 假设数据库中的…