BP神经网络的实践经验

news2024/11/15 11:06:26

目录

一、BP神经网络基础知识

1.BP神经网络

2.隐含层选取

3.激活函数

4.正向传递

5.反向传播

6.不拟合与过拟合

二、BP神经网络设计流程

1.数据处理

2.网络搭建

3.网络运行过程

三、BP神经网络优缺点与改进方案

1.BP神经网络的优缺点

2.改进方案


一、BP神经网络基础知识

1.BP神经网络

        BP神经网络,全称为反向传播(Backpropagation)神经网络,是一种基于监督学习的多层前馈神经网络。它通过使用反向传播算法来训练网络,以最小化输出层与期望输出之间的误差。这种网络模型通过调整神经元之间的连接权重和阈值,来学习输入与输出之间的复杂映射关系。

        信息因子从输入层、隐含层、输出层依次正向传递,误差因子则反向传播,通过损失函数不断调整之间的权重值,从而减小损失,从而使预测结果更接近真实值。BP神经网络结构如下图:

2.隐含层选取

        一般在BP神经网络中,输入层和输出层都为一层,并且节点数量都比较确定,而隐含层中层数和节点数量的选取方法对于模型的性能是比较重要的。

        隐含层中层数的选取一般一两层就足够,并不是说隐含层越多越好,如果需要更精确的结果,则不断的尝试用不同层数来测试网络的性能,从中选取较为合适的层数。隐含层中节点数量的选取一般通过经验公式来确定:

s=\sqrt{m+n}+c

s为隐含层的层数,m、n分别为输入层与输出层的因子数量,c为[1,10]之间的一个任意常数。

3.激活函数

        在BP神经网络模型中,需要考虑到激活函数的选取,一般激活函数有以下三种:

  • Sigmoid函数

        Sigmoid函数又称S型函数,它的取值范围在(0,1)之间,单调连续,处处可微。

         Sigmoid函数在处理回归问题时效果较好,因为它能够将输出限制在(0,1)之间,适用于需要概率输出的场景。然而,Sigmoid函数在输入较大或较小时,梯度接近于0,容易导致梯度消失问题,影响网络的训练效果。Sigmoid函数常用于隐藏层和二分类的输出层。

  • Tanh函数

        Tanh函数是双曲正切函数,它的取值范围在(-1,1)之间,也是单调连续,处处可微。

  

         Tanh函数可以看作是Sigmoid函数的变体,它解决了Sigmoid函数输出不是以0为中心的问题。然而,Tanh函数同样存在梯度消失的问题。

  • ReLU函数

        ReLU(Rectified Linear Unit)函数是修正线性单元函数。

        relu函数是一个通用的激活函数,针对Sigmoid函数和tanh的缺点进行改进的,目前在大多数情况下使用。

4.正向传递

        正向传递是数据从输入层到输出层的传播过程。

         如上图有n个输入值,并且每个节点a_{i}对应的权重值为w_{i},sum节点的阈值为b,则sum=w_{1}*a_{1}+w_{2}*a_{2}+...+w_{n}*a_{n}+b,sum通过激活函数t,输出节点的结果r。

 上图只为所有神经元中的其中一个神经元的传播过程,其余皆为一样的过程,每层向前传播的过程基本一样。

5.反向传播

        反向传播是从输出层到输入层的过程,基于梯度下降法,通过计算损失函数关于网络参数的梯度,并将这些梯度反向传播回网络,以更新网络的权重与阈值。并通过调整网络中的权重和阈值来最小化网络输出与目标输出之间的误差。这个过程通过迭代进行,直到达到某个停止条件,如损失函数收敛或者达到预设的训练次数。

        从输出层开始,根据链式法则计算每个神经元的梯度(即误差关于该神经元参数的偏导数)。梯度表示了参数变化对损失函数的影响程度,用于指导参数的更新方向,通过网络的每一层反向传播,直到输入层。权重和偏置的更新目的是减小损失函数的值,使网络预测更加准确。

6.不拟合与过拟合

  • 不拟合

        出现数据不拟合的情况时,需要调整网络的结构以及初始化的参数。

  • 过拟合

        出现过拟合说明数据量太小,需要加大样本的数量,防止过拟合现象。

二、BP神经网络设计流程

1.数据处理

  • 数据收集

        从各种来源收集相对应研究方向的原始数据。这些来源包括:数据文件、音频、图像,视频等。

  • 数据预处理

        数据清洗:检查并处理异常数据,一般称为噪声。处理白噪声,即处理有规律性的垃圾数据,一般会使用小波变换频率域滤波

        数据转换:处理音频数据时,使用音频处理技术得出音频每个时段的振幅与频率数据,使用归一化处理,使数据归一到[0,1]之间,可减小异常值的影响,并使数据在后续处理中更方面。

  • 数据存储

        处理过的数据被存放在数据库或其他类型的数据存储系统中,以便后续的使用。

  • 数据分割

        将数据集分割为训练集和测试集。训练集用于训练模型,一般使用网上数据;测试集用于评估模型性能,一般使用线下收集的真实数据。

2.网络搭建

  • 确定输入与输出

        首先明确你输入的数据是什么,并明确输入数据的方式,输出是你希望神经网络预测得出的目标。例如:输入的数据有振幅、频率与加速度三种类型数据,输出的是预测故障的类别。

        输入的方式选择标量、向量还是张量,一般选用向量。多个向量组成的数组成为矩阵,神经网络便是用矩阵来运算的。

  • 设计网络的结构

        根据当前情景选择合适的神经网络类型,比如:全连接神经网络(FCN)、卷积神经网络(CNN)、BP神经网络等。确定输入层与输出层的节点数量和隐含层的层数与其节点数量。输入层相当于输入特征的数量,输出层相当于输出的维度。选定激活函数,如:Sigmoid函数、Tanh函数、ReLU函数。

  • 初始化参数

        初始化网络中的权值与阈值。一般可使用随机初始化的方法来进行初始值的设置。

3.网络运行过程

  • 前向传播

        将数据输入神经网络模型中,按照模型结构,数据值乘以权重加上阈值,从输入层、隐含层、输出层依次向前进行权值的计算与更新,最后通过激活函数的计算得到每个神经元的输出,在输出层输出结果。

  • 计算损失函数

        根据输出层的输出和真实标签数据,计算损失函数(或代价函数)的值。损失函数用于衡量预测值与实际值之间的差异,常用的损失函数包括均方误差(MSE)和交叉熵损失(Cross Entropy Loss)等。目的是减小损失,使得到的结果数据更接近真实值。

  • 反向传播

        利用损失函数的梯度信息,从输出层开始向输入层反向传播误差,逐层计算每个权重和阈值的梯度,并根据梯度不断调整权重和阈值,依此收敛到一个范围,减小损失函数的值。

  • 重复训练

        数据通过上述过程重复计算,直到达到可接受的程度或达到迭代的次数。因为BP神经网络属于有监督的神经网络模型,在多次训练过程中,我们需要手动调整因子数量,隐含层数量等,以求使BP神经网络模型达到最优。

三、BP神经网络优缺点与改进方案

1.BP神经网络的优缺点

  • 优点:

        特别适合于解决复杂的非线性问题;自学习和自适应能力较强;具有一定的泛化能力。

  • 缺点:

        学习速度较慢;容易陷入局部最小值;网络结构选择困难等。

2.改进方案

        可以引入粒子群优化算法来对BP神经网络进行优化。粒子群优化算法能够加速模型的收敛速度,克服BP神经网络易陷入局部最优解的问题。它提供了一种更全局的搜索策略,更够更好的逼近最优解,适合优化各种分类预测问题。

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

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

相关文章

C# modbus验证

窗体 还有添加的serialPort控件串口通信 设置程序配置 namespace CRC {public static class CRC16{/// <summary>/// CRC校验&#xff0c;参数data为byte数组/// </summary>/// <param name"data">校验数据&#xff0c;字节数组</param>///…

Nginx:负载均衡小专题

运维专题 Nginx&#xff1a;负载均衡小专题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

docker nginx mysql redis

启动没有数据卷的nginx docker run -d -p 86:80 --name my-nginx nginx把/etc/nginx中的配置复制到宿主机 docker cp my-nginx:/etc/nginx /home/nginxlkl把/html 中的文件复制到宿主机 docker cp my-nginx:/etc/nginx /home/nginxlkl删除当前镜像 docker rm -f my-nginx重新起…

鸿蒙语言基础类库:【@ohos.uri (URI字符串解析)】

URI字符串解析 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入…

汇川CodeSysPLC教程 Modbus变量编址

线圈&#xff1a;位变量&#xff0c;只有两种状态0和1。汇川PLC中包含Q区及SM区等变量。 寄存器&#xff1a;16位&#xff08;字&#xff09;变量&#xff0c;本PLC中包含M区及SD区等变量 说明&#xff1a; 汇川HMI的专用协议使用不同功能码&#xff1a;在访问SM时&#xff0c…

论文阅读 - Intriguing properties of neural networks

Intriguing properties of neural networks 经典论文、对抗样本领域的开山之作 发布时间&#xff1a;2014 论文链接: https://arxiv.org/pdf/1312.6199.pdf 作者&#xff1a;Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

第二证券股市资讯:深夜!突然暴涨75%!

一则重磅收买引发医药圈轰动。 北京时间7月8日晚间&#xff0c;美股开盘后&#xff0c;美国生物制药公司Morphic股价一度暴升超75%。音讯面上&#xff0c;生物医药巨子礼来公司官宣&#xff0c;将以57美元/股的价格现金收买Morphic&#xff0c;较上星期五的收盘价溢价79%&…

昇思MindSpore学习笔记6-01LLM原理和实践--FCN图像语义分割

摘要&#xff1a; 记录MindSpore AI框架使用FCN全卷积网络理解图像进行图像语议分割的过程、步骤和方法。包括环境准备、下载数据集、数据集加载和预处理、构建网络、训练准备、模型训练、模型评估、模型推理等。 一、概念 1.语义分割 图像语义分割 semantic segmentation …

ARCGIS PRO 要素标注

一、普通模式 1、标注&#xff1a;名称和面积&#xff08;无分数线&#xff09; 语言&#xff1a;Arcade $feature.QLR \nRound($feature.Shape_Area,2) 语言&#xff1a;vbscript [QLR] & " " & Round([Shape_Area],2) 2、标注&#xff1a;名称…

Leetcode 295.数据流的中位数

295.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: Media…

redis运维:sentinel模式如何查看所有从节点

1. 连接到sentinel redis-cli -h sentinel_host -p sentinel_port如&#xff1a; redis-cli -h {域名} -p 200182. 发现Redis主服务器 连接到哨兵后&#xff0c;我们可以使用SENTINEL get-master-addr-by-name命令来获取当前的Redis主服务器的地址。 SENTINEL get-master-a…

STM32对数码管显示的控制

1、在项目开发过程中会遇到STM32控制的数码管显示应用&#xff0c;这里以四位共阴极数码管显示控制为例讲解&#xff1b;这里采用的控制芯片为STM32F103RCT6。 2、首先要确定数码管的段选的8个引脚连接的单片机的引脚是哪8个&#xff0c;然后确认位选的4个引脚连接的单片机的4…

SpringBoot 启动流程六

SpringBoot启动流程六 这句话是创建一个上下文对象 就是最终返回的那个上下文 我们这个creatApplicationContext方法 是调用的这个方法 传入一个类型 我们通过打断点的方式 就可以看到context里面的东西 加载容器对象 当我们把依赖改成starter-web时 这个容器对象会进行…

【网络安全】对称加密算法

文章目录 非对称加密对称加密&#xff1a;Des 加密3 DES 加密Des 加密java ApiAES 加密算法AES 加密过程AES 密钥拓展 非对称加密 非对称加密算法需要两个密钥&#xff1a;公开密钥&#xff08;publickey:简称公钥&#xff09;和私有密钥&#xff08;privatekey:简称私钥&…

一键配置PCL环境+VTK环境(最简单的方法)

系列文章目录 1. Windows系统下5分钟配置好PCL&#xff08;debug和release&#xff09; 2. PCL1.11.0Qt5.14.2VTK8.2VS2019 环境配置&#xff08;超详细&#xff09; 文章目录 系列文章目录前言一、下载解压文件二、双击运行Setup.bat三、测试视频四、所需文件 前言 之前写过…

Android 开发中 C++ 和Java 日志调试

在 C 中添加堆栈日志 先在 Android.bp 中 添加 ‘libutilscallstack’ shared_libs:["liblog"," libutilscallstack"]在想要打印堆栈的代码中添加 #include <utils/CallStack.h> using android::CallStack;// 在函数中添加 int VisualizerLib_Crea…

20240708 每日AI必读资讯

&#x1f916;破解ChatGPT惊人耗电&#xff01;DeepMind新算法训练提效13倍&#xff0c;能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择&#xff08;JEST&#xff09;&#xff0c;大大减少了所需的计算资源和时间。 - JE…

python基础篇(9):模块

1 模块简介 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾. 模块能定义函数&#xff0c;类和变量&#xff0c;模块里也能包含可执行的代码. 模块的作用: python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能, 比如实现…

实在智能荣获WAIC 2024机器之心重量级奖项——AI隐形冠军TOP 10!

近日&#xff0c;世界人工智能大会&#xff08;WAIC 2024&#xff09;如火如荼召开&#xff0c;自2018年首届举办以来&#xff0c;WAIC已成为全球AI领域最具影响力的国际盛会之一。本届WAIC再度集聚了来自世界各地的政府代表、顶尖科学家、行业领袖和创新企业等&#xff0c;共同…

Redis存储原理与数据模型

Redis存储结构 存储转换 redis-value编码 string int&#xff1a;字符串长度小于等于20切能转成整数raw&#xff1a;字符串长度大于44embstr&#xff1a;字符串长度小于等于44 list quicklist&#xff08;双向链表&#xff09;ziplist&#xff08;压缩链表&#xff09; hash …