BP神经网络的实践经验

目录

一、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.mzph.cn/pingmian/43092.shtml

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

相关文章

小山菌_代码随想录算法训练营第四十二天| 121. 买卖股票的最佳时机 、

121. 买卖股票的最佳时机 文档讲解&#xff1a;代码随想录. 买卖股票的最佳时机 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 状态&#xff1a;已完成 代码实现 class Solution { public:int maxProfit(vector<int>& prices) {// …

windows obdc配置

进入控制面板&#xff1a; 进入管理工具&#xff1a;

java解析请求的字符串参数Content-Disposition: form-data;和拼接的键值对

项目场景&#xff1a; 获取到http请求的参数&#xff0c;已经被字符串接收了&#xff0c;需求是需要从字符串中解析出来。 一种情况是&#xff1a;Content-Disposition: form-data; name"userCode" 另一种是&#xff1a;key1value1&key2value2&key3value3…

代码随想录算法训练营第六十二天 | 108. 冗余连接、109. 冗余连接II、复习

108. 冗余连接 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1181 文档讲解&#xff1a;https://www.programmercarl.com/kamacoder/0108.%E5%86%97%E4%BD%99%E8%BF… 思路 从前向后遍历每一条边&#xff08;因为优先让前面的边连上&#xff09;&#xff0…

Simple_ReAct_Agent

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下为代码的实现。 Basic ReAct Agent(manual action) import openai import re import httpx import os from dotenv import load_dotenv, find_dotenvOPENAI_API_KEY os.getenv(OPEN…

java 实现人脸特征提取

1. 安装必要的库 确保你已经安装了JPEG库、BLAS和LAPACK库。在Ubuntu或Debian系统上&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get update sudo apt-get install libjpeg-dev libblas-dev liblapack-dev 在CentOS或Fedora系统上&#xff0c;可以使用以下命令安…

Numpy数组基础操作

1.创建数组 import numpy as np # ————创建数组———— np.array([1,2,3,4]) np.array(range(10))# 迭代对象 np.array([i for i in range(10) if i%20]) #列表&#xff0c;[]列表推导式返回列表 np.array([i for i in range(10) if i%20]) #()# 生成器&#xff0c;列表推…

Pytorch框架权重文件转onnx格式

Pytorch框架权重文件转onnx格式 代码案例 import torch import torchvision.models as modelsmodel models.resnet50() model.load_state_dict(torch.load("./model/pytorch-resnet50.pth"))model.eval() example_input torch.randn(32, 3, 224, 224) # 根据模型…

transformer网络学习

Transformer encoder-decoder模型之间共享的是Encoder最后一层输出的hidden-state。 GitHub - huggingface/transformers: &#x1f917; Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. Bert2Bert中&#xff0c;Encoder的hidden-state同…

昇思25天学习打卡营第10天|ShuffleNet图像分类

ShuffleNet网络结构 ShuffleNet是一种专为移动设备设计的、计算效率极高的卷积神经网络&#xff08;CNN&#xff09;架构。其网络结构的设计主要围绕减少计算复杂度和提高模型效率展开&#xff0c;通过引入逐点分组卷积&#xff08;Pointwise Group Convolution&#xff09;和…

AutoX.js从某音分享链接解析出视频ID

背景 从某音分享的链接中解析出数字的videoID&#xff0c;用来做评论Intent跳转 思路 基本所有的短链接都是302跳转或者js跳转&#xff0c;熟悉http协议都知道&#xff0c;当状态码为302&#xff0c;从headers中提取Location即刻获得视频的原链接 链接中就带有videoId 要注意…

【大模型LLM面试合集】大语言模型基础_Word2Vec

Word2Vec 文章来源&#xff1a;Word2Vec详解 - 知乎 (zhihu.com) 1.Word2Vec概述 Word2Vec是google在2013年推出的一个NLP工具&#xff0c;它的特点是能够将单词转化为向量来表示&#xff0c;这样词与词之间就可以定量的去度量他们之间的关系&#xff0c;挖掘词之间的联系。 …

Java之父James Gosling宣布正式退休 创造无数人的饭碗

编程语言Java的创始人&#xff0c;被誉为“Java之父”的James Gosling&#xff0c;近日在社交媒体上宣布了自己正式退休的消息。Gosling表示&#xff1a;“我终于退休了。做了这么多年的软件工程师&#xff0c;现在是时候享受人生了。”他透露&#xff0c;在亚马逊的过去7年是非…

提高LabVIEW软件通用性的方法

提高LabVIEW软件通用性的方法 在使用LabVIEW开发软件时&#xff0c;提高软件的通用性非常重要。通用性意味着软件可以在不同的应用场景中使用&#xff0c;具备高度的适应性和灵活性&#xff0c;从而提高软件的价值和用户满意度。以下从多个角度详细探讨如何提高LabVIEW软件的通…

Java 反射相关的面试题

Java 创建对象有几种方式&#xff1f; new 创建新对象 通过反射创建对象 采用 clone 机制 通过序列化机制 使用 new 关键字 public class MyClass {public MyClass() {System.out.println("MyClass object created!");} }public class Main {public static voi…

太实用了吧?手把手教你华为eNSP模拟器桥接真实网络!

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 今天聊聊eNSP桥接正式网络&#xff0c;就是把eNSP桥接进真实的网络&#xff0c;利用我们的物理网卡通过实体路…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时&#xff0c;在一行内 输入中英文&#xff0c;当英文部分超过第一行剩余位置时&#xff0c;整个英文部分都会自动换行 问题截图&#xff1a; 期待截图&#xff1a; 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

GEE代码实例教程详解:降水量异常分析

简介 在本篇博客中&#xff0c;我们将通过Google Earth Engine (GEE) 分析特定区域内的降水量异常。利用UCSB-CHG提供的CHIRPS&#xff08;Climate Hazards Group InfraRed Precipitation with Station data&#xff09;数据集&#xff0c;我们可以监测2000年至2020年期间的降…

人员定位系统的功能,你知道多少呢?

在此前的文章中&#xff0c;说到了人员定位系统用于化工厂定位这一用途来完善工厂管理&#xff0c;但同时&#xff0c;基于人员定位系统的强大功能&#xff0c;该系统的应用范围也要宽范的多&#xff0c;那么&#xff0c;本篇文章就来为大家介绍一下吧。 人员定位系统的功能简介…

C++、QT企业管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 人事端&#xff1a; 1、【产品中心】产品案列、新闻动态的发布&#xff1b; 2、【员工管理】新增、修改、删除、搜索功能&#xff1b;合同以图片的方式上传 3、【考勤总览】根据日期显示所有员工上班、下班时间…