最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

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

互联网 admin 1浏览 0评论

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

一、人工神经网络

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

​ 神经网络潜讲

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

二、人工神经网络分类

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

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

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

三、BP神经网络概述

1. 特点

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

2. 学习算法

(1) 传播阶段

​ 首先是信号传播

​ 其次是误差的反向传播

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

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

3. 举例

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

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

​ 可以将最终结果与预期结果 z" role="presentation">z 作对比,得到误差值 δ δ , 从而得到 δ4=w41δ" role="presentation">δ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=(x−min)/(max−min)​" role="presentation">y=(xmin)/(maxmin)

      • y=2∗(x−min)/(max−min)−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神经网络影响

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

        七、源码及数据下载

        链接: 密码:ebih

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

      一、人工神经网络

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

      ​ 神经网络潜讲

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

      二、人工神经网络分类

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

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

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

      三、BP神经网络概述

      1. 特点

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

      2. 学习算法

      (1) 传播阶段

      ​ 首先是信号传播

      ​ 其次是误差的反向传播

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

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

      3. 举例

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

      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

      ​ 可以将最终结果与预期结果 z" role="presentation">z 作对比,得到误差值 δ δ , 从而得到 δ4=w41δ" role="presentation">δ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=(x−min)/(max−min)​" role="presentation">y=(xmin)/(maxmin)

          • y=2∗(x−min)/(max−min)−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神经网络影响

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

            七、源码及数据下载

            链接: 密码:ebih

发布评论

评论列表 (0)

  1. 暂无评论