BP神经网络原理及在Matlab中的应用

2023-11-06

一、人工神经网络

关于对神经网络的介绍和应用,请看如下文章

神经网络潜讲

如何简单形象又有趣地讲解神经网络是什么

二、人工神经网络分类

  • 按照连接方式——前向神经网络、反馈(递归)神经网络

  • 按照学习方式——有导师学习神经网络、无导师学习神经网络

  • 按照实现功能——拟合(回归)神经网络、分类神经网络

三、BP神经网络概述

1. 特点

  • BP神经网络中 BP 是指 BackPropagation (反向传播) ,指的是误差的反向传播 ,其信号是向前传播的 , 从结构上分类 ,它是前向有导师学习神经网络 ,BP神经网络要求激活函数必须是可微分的函数。

2. 学习算法

(1) 传播阶段

​ 首先是信号传播
BP网络

​ 其次是误差的反向传播

​ 将误差按照信号的反方向传播,结果的误差由权值设置不合理造成,这个步骤用来保证输出结果的正确性。

(2) 权值更新阶段
  • 梯度下降法——利用梯度下降最快的方向进行权值修正

3. 举例

BP网络例子

​ 图中是一个简单的神经网络,可以计算出

y1=f1(w1x1+w3x2) y 1 = f 1 ( w 1 x 1 + w 3 x 2 )
, y2=f2(w2x1+w4x2+w5x3) y 2 = f 2 ( w 2 x 1 + w 4 x 2 + w 5 x 3 ) , y3=f3(w6x3) y 3 = f 3 ( w 6 x 3 ) , y4=f4(w11y1+w21y2+w31y3) y 4 = f 4 ( w 11 y 1 + w 21 y 2 + w 31 y 3 ) , y5=f5(w32y3) y 5 = f 5 ( w 32 y 3 )

​ 最终输出为 y=f(w41y4+w51y5) y = f ( w 41 y 4 + w 51 y 5 ) 。假设预期结果为 z z

​ 可以将最终结果与预期结果 zz 作对比,得到误差值 δ δ , 从而得到 δ4=w41δδ4=w41δ , δ5=w51δ δ 5 = w 51 δ δ1=w11δ4 δ 1 = w 11 δ 4 δ2=w21δ4 δ 2 = w 21 δ 4 δ3=w31δ4+w32δ5 δ 3 = w 31 δ 4 + w 32 δ 5

​ 因此可以得到 w1=w1+ηδ1df1(e)dex1 w 1 ′ = w 1 + η δ 1 d f 1 ( e ) d e x 1 , e e 为 输入参数,其他权值修改同理。

四、数据归一化

  1. 什么是数据归一化
    • 将数据映射到 [0,-1] 或 [-1,1] 区间或其他区间
  2. 为什么要数据归一化
    • 输入数据的单位不一样,有些数据的范围很大,导致的结果是神经网络收敛慢、训练时间长。
    • 数据范围大的输入在模式分类中的作用可能会偏大,数据范围小的输入在模式分类中的作用可能会偏小
    • 由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。
    • 某些激活函数在 (0,1) 外很平缓,区分度很小。
  3. 归一化算法
    • y=(xmin)/(maxmin)y=(xmin)/(maxmin)
      • y=2(xmin)/(maxmin)1 y = 2 ∗ ( x − m i n ) / ( m a x − m i n ) − 1
      • 五、函数介绍

        • 归一化函数——mapminmax()
          • [Y,PS] = mapminmax(X,YMIN,YMAX),X是预处理的数据,Ymin和Ymax是期望的每一行的最小值与最大值,Y是规范化得到的数据,这种规范化的映射记录在 PS 中。
          • Y = mapminmax(‘apply’,X,PS),这种方法一般是用在上一条语句之后,用上一条语句得到的 PS ,可以使得这里要处理的数据的规范化规则和上一条是一样的。
          • X = mapminmax(‘reverse’,Y,PS) ,预处理之后的数据进行反转得到原始数据 。
        • 创建前向神经网络——newff()
          • net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
          • P :输入参数矩阵。
          • T :目标参数矩阵。
          • S :N-1个隐含层的数目(S(i)到S(N-1)),默认为空矩阵[] 。
          • TF:相关层的传递函数,默认隐含层为tansig函数,输出层为purelin函数。此外还有 purelin: 线性传递函数。  tansig :正切S型传递函数。logsig :对数S型传递函数。
          • BTF:BP神经网络学习训练函数,默认值为trainlm函数 。此外还有 traingd:最速下降BP算法。traingdm:动量BP算法。trainda:学习率可变的最速下降BP算法。traindx:学习率可变的动量BP算法。trainrp:弹性算法。变梯度算法:traincgf(Fletcher-Reeves修正算法)traincgp(Polak_Ribiere修正算法)traincgb(Powell-Beale复位算法)trainbfg(BFGS 拟牛顿算法)trainoss(OSS算法)。
          • BLF:权重学习函数,默认值为learngdm。PF:性能函数,默认值为mse,可选择的还有sse,sae,mae,crossentropy。
          • IPF,OPF,DDF均为默认值即可。
        • 训练函数——train()
          • [net,tr,Y,E,Pf,Af] = train(net,P,T,Pi,Ai)
          • net:神经网络
          • P : 神经网络输入
          • T:神经网络目标(可选,有或无)
          • Pi:初始输入延迟条件(默认为0)
          • Ai:初始层延迟条件(默认为0)
          • 返回值 net :新的训练过的网络
          • 返回值 tr :训练记录
        • 仿真,模拟,预测——sim()
          • [Y,Pf,Af,E,perf] = sim(net,P,Pi,Ai,T)
          • Y:输出
          • Pf:最终输出延迟
          • Af:最终层延迟
          • E:误差向量
          • perf:平均绝对误差(网络性能)
          • P:输入
          • Pi:初始输入延迟,默认为0
          • Ai:初始层延迟,默认为0
          • T:神经网络目标

        六、具体实例

        • 问题描述
          问题描述

        • 解题思路

        解题思路

        • 代码

        %% I. 清空环境变量
        clear all
        clc

        %% II. 训练集/测试集产生
        %%
        % 1. 导入数据
        load spectra_data.mat

        %%
        % 2. 随机产生训练集和测试集,因为是随机产生,所以每次执行的结果会不同
        temp = randperm(size(NIR,1));
        % 训练集——50个样本
        P_train = NIR(temp(1:50),:)’;
        T_train = octane(temp(1:50),:)’;
        % 测试集——10个样本
        P_test = NIR(temp(51:end),:)’;
        T_test = octane(temp(51:end),:)’;
        N = size(P_test,2);

        %% III. 数据归一化
        [p_train, ps_input] = mapminmax(P_train,0,1);
        p_test = mapminmax(‘apply’,P_test,ps_input);

        [t_train, ps_output] = mapminmax(T_train,0,1);

        %% IV. BP神经网络创建、训练及仿真测试
        %%
        % 1. 创建网络
        net = newff(p_train,t_train,9);

        %%
        % 2. 设置训练参数
        net.trainParam.epochs = 1000; %迭代次数
        net.trainParam.goal = 1e-3; %训练目标,误差范围
        net.trainParam.lr = 0.01; %学习率

        %%
        % 3. 训练网络
        net = train(net,p_train,t_train);

        %%
        % 4. 仿真测试
        t_sim = sim(net,p_test);

        %%
        % 5. 数据反归一化
        T_sim = mapminmax(‘reverse’,t_sim,ps_output);

        %% V. 性能评价
        %%
        % 1. 相对误差error
        error = abs(T_sim - T_test)./T_test;

        %%
        % 2. 决定系数R^2
        R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));

        %%
        % 3. 结果对比
        result = [T_test’ T_sim’ error’]

        %% VI. 绘图
        figure
        plot(1:N,T_test,’b:*’,1:N,T_sim,’r-o’)
        legend(‘真实值’,’预测值’)
        xlabel(‘预测样本’)
        ylabel(‘辛烷值’)
        string = {‘测试集辛烷值含量预测结果对比’;[‘R^2=’ num2str(R2)]}; %越接近1,效果越好
        title(string)

        • 执行结果

          执行结果

        • 参数对BP神经网络影响

          • 隐含层神经元节点个数
          • 激活函数类型的选择
          • 学习率
          • 初始权值与阈值
          • 交叉验证
          • 留一法

        七、源码及数据下载

        链接:https://pan.baidu.com/s/1PFhsEF-nBf1h2Ch3XYh4IA 密码:ebih

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BP神经网络原理及在Matlab中的应用 的相关文章

  • 对多个属性使用一种设置方法 MATLAB

    我有几个属性基本上使用相同的属性set method classdef MyClass properties A B end methods function mc MyClass a b Constructor mc A a mc B b
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标

随机推荐

  • C++文件读写操作(自学笔记三)

    C 中对文件的操作的三个大类 写操作 ofstream 读操作 ifstream 读写操作 fstream 要想实现对文件的读写操作 头文件中需要包含 include
  • spring初始化方法的执行顺序以及其原理

    Spring中初始化方法的执行顺序 首先通过一个例子来看其顺序 调用顺序 init2 PostConstruct注解 gt afterPropertiesSet InitializingBean接口 gt init3 init method
  • 数学建模——相关系数(1)——皮尔逊相关系数(Person)

    文章目录 一 相关系数专栏简介 二 相关的基本数学概念 总体和样本 三 皮尔逊相关系数 Person 1 协方差 用于引出相关系数的定义 2 总体皮尔逊Person相关系数 3 样本皮尔逊Person相关系数 4 皮尔逊相关系数的使用范围
  • 海思平台GPIO驱动最简单实现

    闲来无事 发两个小程序玩玩 利用HI MPI SYS SetReg HI MPI SYS GetReg实现GPIO驱动程序 源码 include
  • Java中的拷贝

    Java中的拷贝 在Java中 深拷贝和浅拷贝主要用于对象的拷贝 即将一个对象复制给另一个对象 而引用拷贝一般用于对象的赋值和参数传递 三者的对比图 浅拷贝 浅拷贝指只拷贝对象的引用 不拷贝对象本身 也就是说 如果对象中有引用类型的成员变量
  • [深度学习] 超参数设定和网络训练

    超参数设定 介绍一些重要的网络设计过程中的超参数设定技巧和训练技巧 如学习率 批规范化操作和网络优化化策略的选择 网络超参数的设定 网络超参数设定在搭建整个网络架构之前 需首先指定与网络结构相关的各项超参数 输入图像像素 卷积层个数 卷积核
  • 关于connectionstring字符串的那点事

    我们在做VB数据库经典实例这本书上的五个小例子和做学生信息管理系统时 都需要通过Vb链接数据库 在众多的链接方式中connectionstring字符串应该是较为简单的一种方式 下面我来详细介绍它的一些属性 1 使用SQL Server数据
  • stm32------TFTLCD显示

    目录 一 1 硬件连接 2 LCD lcddev结构体 LCD结构体 mini版没有 lcddev结构体 3 七个底层接口函数 写寄存器值函数 写数据函数 读数据函数 写寄存器内容函数 读寄存器内容函数 开始写GRAM函数 写GRAM函数
  • 1500*B. The Walkway(贪心&规律)

    解析 把每个区间段分成左闭右开区间 我们可以观察到 每个区间的饼干数量为 r l d 上取整 所以先计算不删除某个点的饼干总和init 然后遍历所有点 将这个点删除 所以删除某个点后剩余数量为 找出最小值并且统计数量 需要注意的是 因为如果
  • java mysql驱动 名称_JDBC连接mysql的驱动mysql connector java安装使用教程

    MySQL connector java是一款由mysql官方推出的jdbc驱动 它是java通过JDBC连接操作mysql的驱动 解压之后是jar包 可以实现通过jdbc来远程连接数据库进行各种管理操作 mysql jdbc驱动需要配合j
  • Rethinking Data Augmentation

    Rethinking Data Augmentation Self Supervision and Self Distillation Abstract 对进行了数据增强 翻转 裁剪等操作 的增强数据任然使用原始标签时 如果增强数据的分布与
  • OpenAI Translator - 基于 ChatGPT的最强开源 AI 划词翻译工具

    为啥要造这个轮子 我开发了一个 Bob 的插件 bob plugin openai translator 使用 ChatGPT API 在 macOS 上进行全局划词翻译 但是由于很多用户并不是 macOS 用户 所以特此开发了一个浏览器插
  • 2014年1月1日-7日(共25小时,剩4743小时)

    1月1日元旦放假 晚上编程1小时 1月2日和3日每天5小时 1月4日和5日周末 周六的时候编程5小时 周日出去玩了 1月6日出去办事 下午2小时 1月7日上下午和晚上 估计应该有7小时 共25小时
  • 基于51单片机的自动窗帘控制系统

    1 简介 自动窗帘控制系统核心采用的是单片机STC89C52 其次利用了光照传感器 按键 显示屏以及信号调理电路等外围电路 使整个系统在各模块的配合下可实现半自动控制 自动控制 定时控制等功能 其主要功能有6个 分别为 1 手动控制 该功能
  • 《golang高级编程》学习笔记

    一 数组 字符串 切片 1 数组定义方式 var a 3 int 定义长度为3的int型数组 元素全部为0 var b int 1 2 3 定义长度为3的int型数组 元素为 1 2 3 var c int 2 3 1 2 定义长度为3的i
  • msvcp100.dll丢失怎么修复,这三个常用的修复方法可以解决

    msvcp100 dll是一个动态链接库文件 它是Microsoft Visual C Redistributable软件包的一部分 这个文件的作用是提供在运行C 程序时所需的函数和功能 msvcp100 dll是一个非常重要的文件 它为我
  • sed替换、提取内容案例

    sed替换 这个命令可以看到替换后的内容 如果希望替换后的内容直接覆盖原文件 加上 i参数即可 备注 mac与linux替换原文件略有区别 mac强制要求对原文件进行备份 more tmp txt abcdef hbhberfdhsf se
  • tshydro工具

    一 工具介绍 https github com cavios tshydro tshydro R package that estimates water level time series from satellite altimetry
  • C++里面的继承

    C 里面的继承 1 什么是继承以及怎样继承 1 1 定义 1 2 继承格式与方式 2 基类对象与派生类对象之间的赋值转换 公有继承 3 作用域的理解 4 派生类的默认成员函数 5 继承与友元 继承与静态成员 6 菱形继承和菱形虚拟继承 7
  • BP神经网络原理及在Matlab中的应用

    一 人工神经网络 关于对神经网络的介绍和应用 请看如下文章 神经网络潜讲 如何简单形象又有趣地讲解神经网络是什么 二 人工神经网络分类 按照连接方式 前向神经网络 反馈 递归 神经网络 按照学习方式 有导师学习神经网络 无导师学习神经网络