基于 MATLAB 语言的 BP 神经网络的改进算法

摘 要: 针对标准 BP 算法存在的缺陷, 本文给出了基于 MATLAB 语言的 BP 神经网络几种改进的算法. 阐述了各种 BP 算法的优化技术原理、优缺点, 并就它们的训练速度和内存消耗情况作了比较. 建议在多数 BP 神经网络训练 时, 先尝试使用 Levenberg- Marquardt 算法, 其次是 BFGS 算法或共轭梯度法以及 RPROP 算法.

关键词:MATLAB 语言; BP 神经网络; BP 优化算法

1 引 言 人工神经网络( Artificial Neural Network, ANN) , 自从 20 世纪 50 年代 Rosenblatt 首次将单层感知器 应用于模式分类学习以来, 已经有了几十年的研究 历史. 但是, 由于 Minsky 和 Papert 指出单层系统的 局限性, 并表达了对多层系统的悲观看法, 在 20 世 纪70 年代对ANN 的研究兴趣减弱. 直至80 年代中 期Rumelhart 等重新阐述了反传训练方法1 , 使得在 ANN 领域的理论和应用研究开始在世界范围内重 新兴起. ANN 是一种按照人脑的组织和活动原理而 构造的一种数据驱动型非线性映射模型, 它具有并 行处理、自适应自组织、联想记忆、容错鲁棒以及逼 近任意非线性等特性, 在预测评估、模式识别、信号 处理、组合优化及知识工程等领域具有广泛的应 用 [ 2~ 5] . 近年来, 已有多种 ANN 模型被提出并得以 深入研究. 其中, 80 % ~ 90 % 的人工神经网络模型 是采用前馈反向传播网络( Back- Propagation Net work 简称 BP 网络) 或它的改进形式[ 6~ 10 ] , 它是前 向网络的核心部分, 体现了网络最精华的部分. 标 准的 BP 网络是根据 Widrow- Hoff 规则, 采用梯度 下降算法, 在非线性多层网络中, 反向传播计算梯 度. 但 BP 网络存在自身的限制与不足, 如需要较长 的训练时间、会收敛于局部极小值等, 使得 BP 算法 在实际应用中不是处处能胜任[ 5] .

因此近十几年来, 许多研究人员对其做了深入的研 究, 提出了许多改进的算法[ 2, 5, 11] , 如使用动量项的 加快离线训练速度的方法[ 1] 、归一化权值更新技术 方法 [ 11] 、快速传播算法 [ 12] 、- 方法 [ 13] 、扩展卡尔 曼滤波法[ 14] 、二阶优化[ 15] 以及最优滤波法[ 16] 等. 本文讨论 BP 网络的改进算法有两类, 一类是 采用启发式技术, 如附加动量法、自适应学习速率 法、RPROP 方法; 另一类是采用数字优化技术, 如共 轭梯度法、拟牛顿法、Levenberg- Marquardt 方法. 这 些算法集成在MATLAB 语言神经网络工具箱中 [ 2] . MATLAB是 MathWorks 公司研制的一套高性能的数 值计算和可视化软件, 得到了各个领域专家学者的 广泛关注, 因为利用MATLAB 及其工具箱所得结果 是相当令人满意的, 并且其强大的扩展功能为各个 领域的应用提供了手段[ 3] . 其中神经网络工具箱是 用MATLAB 语言开发出来的许多工具箱之一, 网络 的设计者可以根据自己的需要去调用工具箱中有 关神经网络的设计与训练函数, 使自己能够从繁琐 的编程解脱出来, 集中精力去思考问题和解决问 题, 从而提高效率和解题质量. 本文通过基于 MAT LAB语言的 BP 神经网络的不同改进算法的评论, 有助于了解 BP 网络改进的算法及其优缺点, 从而 达到正确、合理、充分应用不同的 BP 算法训练前馈 反向传播网络. 在MATLAB 神经网络工具箱中改进的 BP 算法 及其相应的训练函数有: 附加动量法( traingdm. m) 、 自适应学习速率法( traingda. m, traingdx. m) 、RPROP 方法( trainrp. m) 、共轭梯度法( traincgf. m, traincgp. m, traincgb. m, trainscg. m) 、拟牛顿法 ( trainbfg. m, trainoss) 以及 Levenberg - Marquardt 方法( trainlm. m) .

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

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

相关文章

STM32的分类和选型

F系列(主要用于普通应用) STM32F0xx:低成本、低功耗,适用于成本敏感和低功耗的应用。STM32F1xx:中低端微控制器,具有丰富的外设和良好的性能。STM32F2xx:高性能微控制器,适用于要求…

二维数组的学习

前言 在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。 二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式: 数据类型 数…

【英语趣味游戏】填字谜(Crossword)第2天

谜题出处 柯林斯字谜大全(6),Collins——Big Book of Crosswords (Book 6) Puzzle Number: 115 本期单词 横向 1、Fetch (8) 拿,取,8个字母 答案:Retrieve,取到,拿回 5、Common s…

C/C++笔记-使用mysql-connector-c连接mysql数据库

驱动在这个地方下载: MySQL :: Download MySQL Connector/C (Archived Versions) 我下载的是:mysql-connector-c-6.1.11-winx64 解压后lib有2个,一个是libmysql.lib一个是mysqlclient.lib 他们的区别如下: libmysql.lib 和 m…

elementui中的tree自定义图标

需求&#xff1a;实现如下样式的树形列表 自定义树的图标以及点击时&#xff0c;可以根据子级的关闭&#xff0c;切换图标 <el-tree :data"treeList" :props"defaultProps"><template #default"{ node, data }"><span class&quo…

【C/C++ 02】希尔排序

希尔排序虽然是直接插入排序的升级版本&#xff0c;和插入排序有着相同的特性&#xff0c;即原始数组有序度越高则算法的时间复杂度越低&#xff08;预排序机制&#xff09;&#xff0c;但是是不稳定排序算法。 为了降低算法的时间复杂度&#xff0c;所以我们需要在排序之前尽…

ARCGIS PRO SDK 数据库属性域设置与获取

一、数据库创建属性域。 sdk3.1 以下的开发版本不支持&#xff0c;不能使用 Pro SDK 向域添加新的编码值&#xff0c;可以使用地理处理工具&#xff1a; 创建属性域 Dim va As IReadOnlyList(Of String) Dim gpResult As ArcGIS.Desktop.Core.Geoprocessing.IGPResult Dim env…

【EEG信号处理】ERP相关

ERP&#xff0c;全称为event-related potential&#xff0c;中文是事件相关电位。 首先要明确的一点是&#xff0c;ERP是根据脑电图EEG得到的&#xff0c;他是EEG的一部分&#xff0c;是最常用的时域分析方法 可能有一部分是介绍不到的&#xff0c;望谅解 在维基百科中给的定义…

力扣题集(第一弹)

一日练,一日功;一日不练十日空。 学编程离不开刷题&#xff0c;接下来让我们来看几个力扣上的题目。 1. 242. 有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数…

docker 修改镜像存储路径

Docker的默认存储路径通常是磁盘上的一个临时目录。在默认情况下&#xff0c;Docker容器的数据存储在/var/lib/docker目录下&#xff0c;但是这个路径可能会在系统磁盘空间不足时变得不可用。因此&#xff0c;为了确保数据的可靠性和可用性&#xff0c;有必要更改Docker的默认存…

仅使用 Python 创建的 Web 应用程序(前端版本)第12章_总结

在栏目中&#xff0c;我们使用 Streamlit 等 Python 模块创建了一个 Web 应用程序&#xff0c;而无需编写任何 HTML/JS/CSS。 我希望这能帮助那些已经开始使用 Flask/Django/FastAPI 但对 HTML/JS/CSS 感到沮丧的人&#xff0c;或者那些想要快速创建演示应用程序的人。 WTS 源代…

flutter制作APP的学习

1. 先从flutter对应的前端知识入手 a. 屏幕适配规律&#xff0c;解决大小样式问题 https://juejin.cn/post/7039868577658175524 &#xff08;选择screenutil的使用指南&#xff1a;【Flutter】屏幕像素适配方案 ( flutter_screenutil 插件 )-CSDN博客 Futter 屏幕适配框架…

Manjaro Linux 安装 VirtualBox及VirtualBox命令行

Manjaro 安装GUI VirtualBox 客户端 在 Manjaro Linux 上&#xff0c;你可以使用 pamac 包管理器来安装 VirtualBox。以下是在终端中执行安装 VirtualBox 的命令&#xff1a; 打开终端。 运行以下命令来安装 VirtualBox&#xff1a; pamac install virtualbox如果提示输入管理…

jenkins job无法停止

jenkins 构建job没有启动&#xff0c;构建号点进去杀不掉&#xff0c;左侧没有abort按钮。 进到 “管理Jenkins” -> “脚本控制台” 运行以下脚本&#xff08;需要指定JobName和JobNumber&#xff0c;job名如如果套文件夹&#xff0c;比如cds文件夹下面名字为auto的job&am…

【数据结构与算法】之哈希表系列-20240129

这里写目录标题 一、217. 存在重复元素二、219. 存在重复元素 II三、242. 有效的字母异位词四、268. 丢失的数字五、290. 单词规律六、349. 两个数组的交集七、350. 两个数组的交集 II 一、217. 存在重复元素 简单 给你一个整数数组 nums 。如果任一值在数组中出现至少两次 &a…

VS+QT 配置Eigen库

1、下载Eigen库&#xff0c;如下&#xff1a; 2、解压到项目目录下&#xff0c;如下&#xff1a; 3、 在C/C中包含文件&#xff0c;如下&#xff1a; 4、在头文件中加入如下代码&#xff1a; 5、测试代码&#xff1a; //.cpp文件 #include "testEigen.h"testEigen::…

Linux下安装edge

edge具有及其强大的功能&#xff0c;受到很多人的喜爱&#xff0c;它也开发Linux版本&#xff0c;下面是安装方法&#xff1a; 1.去edge官网下载Linux(.deb)文件。 https://www.microsoft.com/zh-cn/edge/download?formMA13FJ 2.下载之后输入以下指令&#xff08;后面是安装…

Java的集合和字符串相互转换

一、将集合转换为字符串 如果你有一个集合&#xff0c;并且你想将它转换为字符串&#xff0c;你可以使用Java 8引入的String.join()方法。这是一个简单的示例&#xff1a;】 import java.util.Arrays; import java.util.List; public class CollectionToStringExample { p…

Blender 与 3ds Max | 面对面的直接较量(2024)

Blender和3ds Max&#xff0c;哪个动画软件更好&#xff1f;作为一个从事动画领域十年的专业人士&#xff0c;Mark McPherson提供了八条最新建议&#xff0c;帮助你了解哪个软件更适合满足你的3D动画需求。 1.建模 获胜者&#xff1a;3ds Max。3ds Max的建模机制已经被证明是…

软件架构设计

一、考点分布 软件架构的概念&#xff08;※※※&#xff09;基于架构的软件开发&#xff08;※※※※&#xff09;软件架构风格&#xff08;※※※※※&#xff09;特定领域软件架构&#xff08;※※※&#xff09;软件质量属性&#xff08;※※※※※&#xff09;软件架构评估…