zoukankan      html  css  js  c++  java
  • 数模学习笔记(五)——BP神经网络

     1、BP神经网络是一种前馈型网络(各神经元接受前一层的输入,并输出给下一层,没有反馈),分为input层,hide层,output层

    2、BP神经网络的步骤:

    1)创建一个神经网络:newff

    a.训练样本:归一化(premnmx ,postmnmx ,tramnmx)

    b.确定节点数:输出层的节点数可直接获得

    c.确定各层神经元的激活函数

    常见的激活函数:purelin:线性/logsig:对数S型/tansig:正切S型

    d.确定训练函数

    traingd :梯度下降BP训练函数/traingdx :梯度下降自适应学习率训练函数

    %Format:net = newff ( A, B, {C} ,‘trainFun’)

    A:n×2的矩阵,第i行元素为输入信号xi的最小值和最大值

    B:k维行向量,其元素为网络中各层节点数

    C:k维字符串行向量,每一分量为对应层神经元的激活函数

    trainFun :为学习规则采用的训练算法

    2)学习:train

    学习是一个调整权重的过程,使得通过神经网络的输出不断逼近应有的输出

    网络配置参数

    net.trainparam.goal:神经网络训练的目标误差

    net.trainparam.show:显示中间结果的周期

    net.trainparam.epochs:最大迭代次数

    net.trainParam.lr:学习率

    %Farmat:net=train( net, X, Y )

    X:网络实际输入

    Y:网络应有输出

    3)仿真模拟

    选择测试集X进行模拟

    %Farmat:Y=sim(net,X)

      

    3、举例

    下面将举大量的例子来说明BP神经网络的应用。

     1)对函数f(x)=sinx(0=<x<=pi/2)进行逼近

     1 %%%使用BP神经网络逼近函数cos(x)%%%
     2 clc;clear;
     3 x=0:0.1:1.5;%训练样本
     4 y=sin(x);%真实的输出值
     5 net=newff(minmax(x),[10,1],{'logsig','logsig'});%建立bp神经网络
     6 net.trainParam.show = 50;
     7 net.trainParam.lr = 0.01;
     8 net.trainParam.goal = 0.0001;
     9 net.trainParam.epochs = 500;
    10 net=train(net,x,y);%训练样本
    11 testx=0.01:0.1:1.51;
    12 testy=sim(net,testx);%测试
    13 plot(x,y,testx,testy,'r');

     2)对两种蠓虫(Af 与Apf)进行鉴别:

    依据的资料是触角和翅膀的长度,已经测得了9 支Af 和6 支Apf 的数据如下:
    Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),
    (1.48,1.82),(1.54,1.82),(1.56,2.08).
    Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).

    Q:对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3 个标本加以识别。

     1 clear
     2 p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
     3 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
     4 p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00
     5 1.28,2.00;1.30,1.96];
     6 p=[p1;p2]';
     7 pr=minmax(p);
     8 net=newff(pr,[3,2],{'logsig','logsig'});
     9 net.trainParam.show = 10;
    10 net.trainParam.lr = 0.05;
    11 net.trainParam.goal = 1e-10;
    12 net.trainParam.epochs = 50000;
    13 net = train(net,p,goal);
    14 x=[1.24 1.80;1.28 1.84;1.40 2.04]';
    15 y0=sim(net,p)
    16 y=sim(net,x)
  • 相关阅读:
    Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令
    ubuntu中执行可执行文件时报错“没有那个文件或目录”的解决办法(非权限问题)
    不同编译器下,定义一个地址按x字节对齐的数组
    对冒泡排序法的个人理解
    通过py2exe打包python程序的过程中,解决的一系列问题
    IAR工程名修改
    stm8编程tips(stvd)
    获取单片机唯一id(stm32获取单片机唯一id)
    按键抖动的处理方法(按键外部中断)
    stm32--USB(作为U盘)+FatFs的实现
  • 原文地址:https://www.cnblogs.com/wl142857/p/3182799.html
Copyright © 2011-2022 走看看