精华内容
下载资源
问答
  • 感知器神经网络

    2019-01-22 09:26:41
    人工智能,感知器神经网络分类,仿真,内附解释,供初学者使用。
  • 感知器神经网络

    2017-03-05 09:52:12
    感知器神经网络

    从感知器到神经网络


    感知器(Perceptron)

    最近写了一些简单感知器实现NLP任务的代码,对感知器算是掌握了。

    感知器就是一个根据输入 x x x,输出 h ( x ) = s g n ( w   ˙ x + b ) h(x)=sgn(w\dot \ x+b) h(x)=sgn(w ˙x+b)的神经元。
    因为感知器只有input layer和一个神经元的output layer,所以一个感知器只能处理一个本质feature或者做一个二分类。

    训练感知器可以使用随机梯度算法,但是 h ( x ) h(x) h(x)数学性质不够好,所以改成 h ( x ) = σ ( w   ˙ x + b ) h(x)=\sigma(w\dot \ x+b) h(x)=σ(w ˙x+b),其中 σ ( x ) \sigma(x) σ(x)是一个激活函数,其实这样一来单个感知器可以用于Logistic回归。在Logistic回归中讨论过激活函数的使用,一个最大似然估计是 σ ( x ) = s i g m o i d ( x ) \sigma(x)=sigmoid(x) σ(x)=sigmoid(x),当然如果输出不在 ( 0 , 1 ) (0,1) (0,1)内而在 ( − 1 , 1 ) (-1,1) (1,1)内,可以使用 σ ( x ) = t a n h ( x ) \sigma(x)=tanh(x) σ(x)=tanh(x)(事实上这个函数仅仅通过 s i g m o i d ( x ) sigmoid(x) sigmoid(x)平移伸缩变换就可以得到)。反正激活函数的使用是很有讲究的,但是我不太懂具体细节,知道这是一个最大似然估计的结果就好了。

    还有一种朴素的训练方法就是如果输出正确则不更改权重,否则认为这一次输入对应的权重估计有问题,所以直接在权重中减去对应输入分量。虽然这是一个土办法,但是如果输入也是feature的有无0/1,我们经常会用,但方法没有一个名称,后来才知道这是梯度随机算法的一个特例,梯度直接使用输入这一个数据估计,叫在线算法或者增量算法。


    感知器网络(Perceptron Net)

    如果有多分类问题,可以配置多个感知器感知每一个类别,输出它们的最大值就是所属的类别。

    因为最大值的数学性质不好,所以我训练就直接用类似训练感知器的在线算法处理:对于正确预测不做处理,预测错误则惩罚错误的最大值感知器对应权重,给正确的感知器对应权重增益。

    事实上,如果要用随机梯度算法来处理感知器网络训练,可以认为感知器网络是一个hidden layer,那么output layer是一个与hidden layer一样大,但是做了一个softmax,(softmax之所以是softmax,因为看起来它的表达式和max没联系,但事实上在指数较大时候就趋向于一个max函数)


    神经网络(Neural Networks)

    神经元是神经网络的基础,而神经元和感知器原理非常类似。

    s g n ( x ) 类 似 于 s i g m o i d ( x ) , m a x ( x ) 类 似 于 s o f t m a x ( x ) , 判 断 是 否 相 同 类 似 于 代 价 函 数 , 调 整 权 重 算 法 类 似 于 随 机 梯 度 算 法 sgn(x)类似于sigmoid(x),max(x)类似于softmax(x),判断是否相同类似于代价函数,调整权重算法类似于随机梯度算法 sgn(x)sigmoid(x)max(x)softmax(x)

    神经元所用的函数一般连续有梯度,感知器在某些任务中变量和函数可以离散不连续。神经网络可以配置多层,每一层以前一层所有神经元输出作为输入。代价函数除了L2范数,还有交叉熵等代价函数。神经网络训练简单地可以用随机梯度算法,BP算法之类的。但是如果层数太多会遇到梯度消失的问题。

    神经网络还可以把后层的输出重新给前层输入,就是RNN,神经网络处理图像或者NLP中的文本时候考虑context和phrase信息时候需要卷积,就是CNN。当然还有LSTM,bi-LSTM等高级形态…


    最后

    不知道神经网络入门的正确方法是不是感知器,反正我是通过感知器入门神经网络的。感知器代码我手写了一下,感觉还是理解了。从感知器到神经网络感觉过渡比较自然,有一种原来是这样的感觉。

    写了简单的神经网络的代码,感觉神经网络下标比较复杂,所以熟练使用numpy矩阵运算和各种技巧可以避免代码冗长易错。而且有必要学习tensorflow之类的。

    但是我感觉我的学习进度有点慢了,寒假和最近在HMM,感知器上写了太多东西了,也没有加深多少理解,但是耗费了很多时间。所以下一阶段多看书,多理解理论,代码适当少写,加快学习进度。

    展开全文
  • 感知器神经网络的主要部分.pdf
  • MLP(多层感知器神经网络.pdf
  • 感知器神经网络.doc

    2020-04-29 23:36:51
    感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层结构,信息从输入层进入网络,...根据感知器神经元变换函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的人工神经网络
  • 感知器神经网络与BP神经网络

    千次阅读 2019-09-27 20:59:38
    感知器神经网络 一、感知器定义 感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层 结构,信息从输入层进入网络,逐层向前传递至输出层。根据感知器神经元变换函数、隐层 数以及...

    感知器神经网络

    一、感知器定义

    感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层
    结构,信息从输入层进入网络,逐层向前传递至输出层。根据感知器神经元变换函数、隐层
    数以及权值调整规则的不同,可以形成具有各种功能特点的人工神经网络

    二、感知器模型

    在这里插入图片描述

    三、相关代码的实现

    1.感知器神经网络的构建
    % 1. 感知器神经网络的构建
    % 1.1  生成网络
    net=newp([0 2],1);%单输入,输入值为[0,2]之间的数
    inputweights=net.inputweights{1,1};%第一层的权重为1
    biases=net.biases{1};%阈值为1
    

    newp函数用来创建一个感知器,感知器层数为1。

    % 1.2  网络仿真
    
    net=newp([-2 2;-2 2],1);%两个输入,一个神经元,默认二值激活
    net.IW{1,1}=[-1 1];%权重,net.IW{i,j}表示第i层网络第j个神经元的权重向量
    net.IW{1,1}
    net.b{1}=1;
    net.b{1}
    p1=[1;1],a1=sim(net,p1)
    p2=[1;-1],a2=sim(net,p2)
    p3={[1;1] [1 ;-1]},a3=sim(net,p3) %两组数据放一起
    p4=[1 1;1 -1],a4=sim(net,p4)%也可以放在矩阵里面
    net.IW{1,1}=[3,4];
    net.b{1}=[1];
    a1=sim(net,p1)
    
    

    sim为仿真函数,可对模型进行仿真。sim函数中的net代表训练好的网络,第二个元素p1、p2、p3代表网络的输入。

    此时结果为:
    ans =

    -1     1
    

    ans =

     1
    

    p1 =

     1
     1
    

    a1 =

     1
    

    p2 =

     1
    -1
    

    a2 =

     0
    

    p3 =

    1×2 cell 数组

    {2×1 double}    {2×1 double}
    

    a3 =

    1×2 cell 数组

    {[1]}    {[0]}
    

    p4 =

     1     1
     1    -1
    

    a4 =

     1     0
    

    a1 =

     1
    
    % 1.3  网络初始化
    net=init(net);
    wts=net.IW{1,1}
    bias=net.b{1}
    % 改变权值和阈值为随机数
    net.inputweights{1,1}.initFcn='rands';
    net.biases{1}.initFcn='rands';
    net=init(net);
    bias=net.b{1}
    wts=net.IW{1,1}
    a1=sim(net,p1)
    
    

    init为神经网络初始化函数。

    输出结果为:
    wts =

     0     0
    

    bias =

     0
    

    bias =

    0.6294
    

    wts =

    0.8116   -0.7460
    

    a1 =

     1
    
    2.感知器神经网络的学习和训练
    % 2. 感知器神经网络的学习和训练
    % 1 网络学习
    net=newp([-2 2;-2 2],1);
    net.b{1}=[0];
    w=[1 -0.8]
    net.IW{1,1}=w;
    p=[1;2];
    t=[1];
    a=sim(net,p)
    e=t-a
    help learnp
    dw=learnp(w,p,[],[],[],[],e,[],[],[],[],[])
    w=w+dw
    net.IW{1,1}=w;
    a=sim(net,p)
    
    
    net = newp([0 1; -2 2],1);
    P = [0 0 1 1; 0 1 0 1];
    T = [0 1 1 1];
    Y = sim(net,P)
    net.trainParam.epochs = 20;
    net = train(net,P,T);
    Y = sim(net,P)
    
    

    train函数,根据网络、输入、目标输出,训练网络得到输出
    learnp为学习函数

    输出结果为:
    w =

    1.0000   -0.8000
    

    a =

     0
    

    e =

     1
    

    dw =

     1     2
    

    w =

    2.0000    1.2000
    

    a =

     1
    

    Y =

     1     1     1     1
    

    Y =

     0     1     1     1
    

    在这里插入图片描述
    在这里插入图片描述

    % 2 网络训练
    net=init(net);
    p1=[2;2];t1=0;p2=[1;-2];t2=1;p3=[-2;2];t3=0;p4=[-1;1];t4=1;
    net.trainParam.epochs=1;
    net=train(net,p1,t1)
    w=net.IW{1,1}
    b=net.b{1}
    a=sim(net,p1)
    net=init(net);
    p=[[2;2] [1;-2] [-2;2] [-1;1]];
    t=[0 1 0 1];
    net.trainParam.epochs=1;
    net=train(net,p,t);
    a=sim(net,p)
    net=init(net);
    net.trainParam.epochs=2;
    net=train(net,p,t);
    a=sim(net,p)
    net=init(net);
    net.trainParam.epochs=20;
    net=train(net,p,t);
    a=sim(net,p)
    
    

    输出结果为:

    net =
    
        Neural Network
     
                  name: 'Custom Neural Network'
              userdata: (your custom info)
     
        dimensions:
     
             numInputs: 1
             numLayers: 1
            numOutputs: 1
        numInputDelays: 0
        numLayerDelays: 0
     numFeedbackDelays: 0
     numWeightElements: 3
            sampleTime: 1
     
        connections:
     
           biasConnect: true
          inputConnect: true
          layerConnect: false
         outputConnect: true
     
        subobjects:
     
                 input: Equivalent to inputs{1}
                output: Equivalent to outputs{1}
     
                inputs: {1x1 cell array of 1 input}
                layers: {1x1 cell array of 1 layer}
               outputs: {1x1 cell array of 1 output}
                biases: {1x1 cell array of 1 bias}
          inputWeights: {1x1 cell array of 1 weight}
          layerWeights: {1x1 cell array of 0 weights}
     
        functions:
     
              adaptFcn: 'adaptwb'
            adaptParam: (none)
              derivFcn: 'defaultderiv'
             divideFcn: (none)
           divideParam: (none)
            divideMode: 'sample'
               initFcn: 'initlay'
            performFcn: 'mae'
          performParam: .regularization, .normalization
              plotFcns: {'plotperform', plottrainstate}
            plotParams: {1x2 cell array of 2 params}
              trainFcn: 'trainc'
            trainParam: .showWindow, .showCommandLine, .show, .epochs,
                        .time, .goal, .max_fail
     
        weight and bias values:
     
                    IW: {1x1 cell} containing 1 input weight matrix
                    LW: {1x1 cell} containing 0 layer weight matrices
                     b: {1x1 cell} containing 1 bias vector
     
        methods:
     
                 adapt: Learn while in continuous use
             configure: Configure inputs & outputs
                gensim: Generate Simulink model
                  init: Initialize weights & biases
               perform: Calculate performance
                   sim: Evaluate network outputs given inputs
                 train: Train network with examples
                  view: View diagram
           unconfigure: Unconfigure inputs & outputs
     
        evaluate:       outputs = net(inputs)
     
    
    w =
    
        -2    -2
    
    
    b =
    
        -1
    
    
    a =
    
         0
    
    
    a =
    
         0     0     1     1
    
    
    a =
    
         0     1     0     1
    
    
    a =
    
         0     1     0     1
    

    在这里插入图片描述

    3.二输入感知器分类可视化问题
    % 3. 二输入感知器分类可视化问题
    P=[-0.5 1 0.5 -0.1;-0.5 1 -0.5 1];
    T=[1 1 0 1]
    net=newp([-1 1;-1 1],1);
    plotpv(P,T);
    plotpc(net.IW{1,1},net.b{1});
    %hold on;
    %plotpv(P,T);
    net=adapt(net,P,T);
    net.IW{1,1}
    net.b{1}
    plotpv(P,T);
    plotpc(net.IW{1,1},net.b{1})
    net.adaptParam.passes=3;
    net=adapt(net,P,T);
    net.IW{1,1}
    net.b{1}
    plotpc(net.IW{1},net.b{1})
    net.adaptParam.passes=6;
    net=adapt(net,P,T)
    net.IW{1,1}
    net.b{1}
    plotpv(P,T);
    plotpc(net.IW{1},net.b{1})
    
    plotpc(net.IW{1},net.b{1})
    %仿真
    a=sim(net,p);
    plotpv(p,a)
    
    p=[0.7;1.2]
    a=sim(net,p);
    plotpv(p,a);
    hold on;
    plotpv(P,T);
    plotpc(net.IW{1},net.b{1})
    %感知器能够正确分类,从而网络可行。
    
    

    输出结果为:

    T =
    
         1     1     0     1
    
    
    ans =
    
       -0.5000    0.5000
    
    
    ans =
    
        -1
    
    
    ans =
    
       -0.1000    2.0000
    
    
    ans =
    
         2
    
    
    net =
    
        Neural Network
     
                  name: 'Custom Neural Network'
              userdata: (your custom info)
     
        dimensions:
     
             numInputs: 1
             numLayers: 1
            numOutputs: 1
        numInputDelays: 0
        numLayerDelays: 0
     numFeedbackDelays: 0
     numWeightElements: 3
            sampleTime: 1
     
        connections:
     
           biasConnect: true
          inputConnect: true
          layerConnect: false
         outputConnect: true
     
        subobjects:
     
                 input: Equivalent to inputs{1}
                output: Equivalent to outputs{1}
     
                inputs: {1x1 cell array of 1 input}
                layers: {1x1 cell array of 1 layer}
               outputs: {1x1 cell array of 1 output}
                biases: {1x1 cell array of 1 bias}
          inputWeights: {1x1 cell array of 1 weight}
          layerWeights: {1x1 cell array of 0 weights}
     
        functions:
     
              adaptFcn: 'adaptwb'
            adaptParam: (none)
              derivFcn: 'defaultderiv'
             divideFcn: (none)
           divideParam: (none)
            divideMode: 'sample'
               initFcn: 'initlay'
            performFcn: 'mae'
          performParam: .regularization, .normalization
              plotFcns: {'plotperform', plottrainstate}
            plotParams: {1x2 cell array of 2 params}
              trainFcn: 'trainc'
            trainParam: .showWindow, .showCommandLine, .show, .epochs,
                        .time, .goal, .max_fail
     
        weight and bias values:
     
                    IW: {1x1 cell} containing 1 input weight matrix
                    LW: {1x1 cell} containing 0 layer weight matrices
                     b: {1x1 cell} containing 1 bias vector
     
        methods:
     
                 adapt: Learn while in continuous use
             configure: Configure inputs & outputs
                gensim: Generate Simulink model
                  init: Initialize weights & biases
               perform: Calculate performance
                   sim: Evaluate network outputs given inputs
                 train: Train network with examples
                  view: View diagram
           unconfigure: Unconfigure inputs & outputs
     
        evaluate:       outputs = net(inputs)
     
    
    ans =
    
       -0.6000    2.5000
    
    
    ans =
    
         1
    
    
    p =
    
        0.7000
        1.2000
    

    在这里插入图片描述

    4. 标准化学习规则训练奇异样本
    % 4. 标准化学习规则训练奇异样本
    P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1.0 50]
    T=[1 1 0 0 1];
    net=newp([-40 1;-1 50],1);
    plotpv(P,T);%标出所有点
    hold on;
    linehandle=plotpc(net.IW{1},net.b{1});%画出分类线
    E=1;
    net.adaptParam.passes=3;%passes决定在训练过程中训练值重复的次数。
    while (sse(E))
        [net,Y,E]=adapt(net,P,T);
        linehandle=plotpc(net.IW{1},net.b{1},linehandle);
        drawnow;
    end;
    axis([-2 2 -2 2]);
    net.IW{1}
    net.b{1}
    %另外一种网络修正学习(非标准化学习规则learnp)
    hold off;
    net=init(net);
    net.adaptParam.passes=3;
    net=adapt(net,P,T);
    plotpc(net.IW{1},net.b{1});
    axis([-2 2 -2 2]);
    net.IW{1}
    net.b{1}
    %无法正确分类
    %标准化学习规则网络训练速度要快!
    
    % 训练奇异样本
    % 用标准化感知器学习规则(标准化学习数learnpn)进行分类
    net=newp([-40 1;-1 50],1,'hardlim','learnpn');
    plotpv(P,T);
    linehandle=plotpc(net.IW{1},net.b{1});
    e=1;
    net.adaptParam.passes=3;
    net=init(net);
    linehandle=plotpc(net.IW{1},net.b{1});
    while (sse(e))
    [net,Y,e]=adapt(net,P,T);
    linehandle=plotpc(net.IW{1},net.b{1},linehandle);
    end;
    axis([-2 2 -2 2]);
    net.IW{1}%权重
    net.b{1}%阈值
    %正确分类
    
     %非标准化感知器学习规则训练奇异样本的结果
    net=newp([-40 1;-1 50],1);
    net.trainParam.epochs=30;
    net=train(net,P,T);
    pause;
    linehandle=plotpc(net.IW{1},net.b{1});
    hold on;
    plotpv(P,T);
    linehandle=plotpc(net.IW{1},net.b{1});
    axis([-2 2 -2 2]);
    
    

    输出结果为:

    P =
    
       -0.5000   -0.5000    0.3000   -0.1000  -40.0000
       -0.5000    0.5000   -0.5000    1.0000   50.0000
    
    
    ans =
    
      -45.0000   10.5000
    
    
    ans =
    
       -17
    
    
    ans =
    
       -0.2000   -0.5000
    
    
    ans =
    
        -2
    
    
    ans =
    
       -1.5592   -0.1980
    
    
    ans =
    
         0
    

    在这里插入图片描述

    5. 设计多个感知器神经元解决分类问题
    % 5. 设计多个感知器神经元解决分类问题
    p=[1.0 1.2 2.0 -0.8; 2.0 0.9 -0.5 0.7]
    t=[1 1 0 1;0 1 1 0]
    plotpv(p,t);
    hold on;
    net=newp([-0.8 1.2; -0.5 2.0],2);
    linehandle=plotpc(net.IW{1},net.b{1});
    net=newp([-0.8 1.2; -0.5 2.0],2);
    linehandle=plotpc(net.IW{1},net.b{1});
    e=1;
    net=init(net);
    while (sse(e))
    [net,y,e]=adapt(net,p,t);
    linehandle=plotpc(net.IW{1},net.b{1},linehandle);
    drawnow;
    end;
    
    

    输出结果为:

    p =
    
        1.0000    1.2000    2.0000   -0.8000
        2.0000    0.9000   -0.5000    0.7000
    
    
    t =
    
         1     1     0     1
         0     1     1     0
    

    在这里插入图片描述

    BP神经网络

    一、BP神经网络的基本原理

    BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。

    二、基本代码实现

    1. BP神经网络的构建(1)
    % BP网络
    % BP神经网络的构建
    net=newff([-1 2;0 5],[3,1],{'tansig','purelin'},'traingd')
    net.IW{1}
    net.b{1}
    
    p=[1;2];
    a=sim(net,p)
    net=init(net);
    net.IW{1}
    net.b{1}
    a=sim(net,p)
    %net.IW{1}*p+net.b{1}
    p2=net.IW{1}*p+net.b{1}
    a2=sign(p2)
    a3=tansig(a2)
    a4=purelin(a3)
    net.b{2}
    net.b{1}
    
    net.IW{1}
    net.IW{2}
    0.7616+net.b{2}
    a-net.b{2}
    (a-net.b{2})/ 0.7616
    help purelin
    
    p1=[0;0];
    a5=sim(net,p1)
    net.b{2}
    
    

    输出结果为:

    ans =
    
        0.9793    0.7717
        1.5369    0.3008
       -1.0989   -0.7114
    
    
    ans =
    
       -4.8438
       -1.5204
       -0.0970
    
    
    a =
    
        0.5105
    
    
    ans =
    
       -1.6151   -0.0414
        1.3628    0.5217
        1.2726   -0.5981
    
    
    ans =
    
        3.3359
       -1.9858
        3.2839
    
    
    a =
    
        1.6873
    
    
    p2 =
    
        1.6380
        0.4205
        3.3602
    
    
    a2 =
    
         1
         1
         1
    
    
    a3 =
    
        0.7616
        0.7616
        0.7616
    
    
    a4 =
    
        0.7616
        0.7616
        0.7616
    
    
    ans =
    
        0.9190
    
    
    ans =
    
        3.3359
       -1.9858
        3.2839
    
    
    ans =
    
       -1.6151   -0.0414
        1.3628    0.5217
        1.2726   -0.5981
    
    
    ans =
    
         []
    
    
    ans =
    
        1.6806
    
    
    ans =
    
        0.7683
    
    
    ans =
    
        1.0088
    
    purelin - Linear transfer function
    
        This MATLAB function takes N and optional function parameters, S-by-Q matrix of
        net input (column) vectors Struct of function parameters (ignored)
    
        A = purelin(N,FP)
        info = purelin('code')
    
        另请参阅 satlin, satlins, sim
    
        purelin 的参考页
    
    
    a5 =
    
        0.5450
    
    
    ans =
    
        0.9190
    
    2. BP神经网络的构建(2)
    % BP网络
    % BP神经网络的构建
    net=newff([-1 2;0 5],[3,1],{'tansig','purelin'},'traingd')
    net.IW{1}
    net.b{1}
    %p=[1;];
    p=[1;2];
    a=sim(net,p)
    net=init(net);
    net.IW{1}
    net.b{1}
    a=sim(net,p)
    net.IW{1}*p+net.b{1}
    p2=net.IW{1}*p+net.b{1}
    a2=sign(p2)
    a3=tansig(a2)
    a4=purelin(a3)
    net.b{2}
    net.b{1}
    
    
    
    
    P=[1.2;3;0.5;1.6]
    W=[0.3 0.6 0.1 0.8]
    net1=newp([0 2;0 2;0 2;0 2],1,'purelin');
    net2=newp([0 2;0 2;0 2;0 2],1,'logsig');
    net3=newp([0 2;0 2;0 2;0 2],1,'tansig');
    net4=newp([0 2;0 2;0 2;0 2],1,'hardlim');
    
    net1.IW{1}
    net2.IW{1}
    net3.IW{1}
    net4.IW{1}
    net1.b{1}
    net2.b{1}
    net3.b{1}
    net4.b{1}
    
    
    net1.IW{1}=W;
    net2.IW{1}=W;
    net3.IW{1}=W;
    net4.IW{1}=W;
    
    a1=sim(net1,P)
    a2=sim(net2,P)
    a3=sim(net3,P)
    a4=sim(net4,P)
    
    init(net1);
    net1.b{1}
    
    help tansig
    
    

    输出结果为:

    ans =
    
        0.5460    0.9129
       -1.5087    0.3485
        1.3006    0.5761
    
    
    ans =
    
       -4.9802
       -0.1168
        0.3344
    
    
    a =
    
       -0.6727
    
    
    ans =
    
        0.6683   -0.8832
       -1.2254   -0.6327
       -0.9178    0.7985
    
    
    ans =
    
       -0.5511
        2.1943
       -3.9622
    
    
    a =
    
       -2.0856
    
    
    ans =
    
       -1.6491
       -0.2963
       -3.2830
    
    
    p2 =
    
       -1.6491
       -0.2963
       -3.2830
    
    
    a2 =
    
        -1
        -1
        -1
    
    
    a3 =
    
       -0.7616
       -0.7616
       -0.7616
    
    
    a4 =
    
       -0.7616
       -0.7616
       -0.7616
    
    
    ans =
    
       -0.9311
    
    
    ans =
    
       -0.5511
        2.1943
       -3.9622
    
    
    P =
    
        1.2000
        3.0000
        0.5000
        1.6000
    
    
    W =
    
        0.3000    0.6000    0.1000    0.8000
    
    
    ans =
    
         0     0     0     0
    
    
    ans =
    
         0     0     0     0
    
    
    ans =
    
         0     0     0     0
    
    
    ans =
    
         0     0     0     0
    
    
    ans =
    
         0
    
    
    ans =
    
         0
    
    
    ans =
    
         0
    
    
    ans =
    
         0
    
    
    a1 =
    
        3.4900
    
    
    a2 =
    
        0.9704
    
    
    a3 =
    
        0.9981
    
    
    a4 =
    
         1
    
    
    ans =
    
         0
    
    3.训练(1)
    % 训练
    p=[-0.1 0.5]
    t=[-0.3 0.4]
    w_range=-2:0.4:2;
    b_range=-2:0.4:2;
    
    ES=errsurf(p,t,w_range,b_range,'logsig');%单输入神经元的误差曲面
    plotes(w_range,b_range,ES)%绘制单输入神经元的误差曲面
    pause(0.5);
    hold off;
    net=newp([-2,2],1,'logsig');
    net.trainparam.epochs=100;
    net.trainparam.goal=0.001;
    figure(2);
    [net,tr]=train(net,p,t);
    title('动态逼近')
    wight=net.iw{1}
    bias=net.b
    pause;
    close;
    
    

    输出结果为:

    p =
    
       -0.1000    0.5000
    
    
    t =
    
       -0.3000    0.4000
    
    
    wight =
    
       15.1653
    
    
    bias =
    
      1×1 cell 数组
    
        {[-8.8694]}
    

    在这里插入图片描述
    在这里插入图片描述

    4.训练(2)
    % 训练
    p=[-0.2 0.2 0.3 0.4]
    t=[-0.9 -0.2 1.2 2.0]
    h1=figure(1);
    net=newff([-2,2],[5,1],{'tansig','purelin'},'trainlm');
    net.trainparam.epochs=100;
    net.trainparam.goal=0.0001;
    net=train(net,p,t);
    a1=sim(net,p)
    pause;
    h2=figure(2);
    plot(p,t,'*');
    title('样本')
    title('样本');
    xlabel('Input');
    ylabel('Output');
    pause;
    hold on;
    ptest1=[0.2 0.1]
    ptest2=[0.2 0.1 0.9]
    a1=sim(net,ptest1);
    a2=sim(net,ptest2);
    
    net.iw{1}
    net.iw{2}
    net.b{1}
    net.b{2}
    
    

    输出结果为:

    p =
    
       -0.2000    0.2000    0.3000    0.4000
    
    
    t =
    
       -0.9000   -0.2000    1.2000    2.0000
    
    警告: NEWFF used in an obsolete way. 
    > In nnerr.obs_use (line 17)
      In newff>create_network (line 126)
      In newff (line 101) 
              See help for NEWFF to update calls to the new argument list.
     
    
    a1 =
    
       -0.9000   -0.1999    1.1999    2.0000
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 多层感知器MLP快速入门,结合基于DL4J的分类器分析手写体识别的3D可视化
  • 一个单层感知器神经网络程序,matlab编写,实现感知器神经网络训练存储
  • 神经网络感知器

    2012-09-01 17:21:55
    这是神经网络感知器代码,之后我会上传与神经网络有关的一系列matlab程序!希望大家共同学习!
  • 浅谈神经网络及其matlab实现...本文详细介绍了感知器,线性神经网络和BP神经网络的原理相关知识,以及通过matlab工具箱自己编程两种方法实现三种算法。 1.概述 感知器 线性神经网络 BP神经网络 2,

    浅谈神经网络及其matlab实现(感知器,线性神经网络,BP神经网络)

    本文详细介绍了感知器,线性神经网络和BP神经网络的原理和相关知识,以及通过matlab工具箱和自己编程循环两种方法实现三种算法。

    • 1.概述
    • 2 感知器
    • 3 线性神经网络
    • 4 BP神经网络

    1,概述
    人工神经网络,通常称为神经网络,是一种运算的模型,由大量的神经元及其相互连接构成,每个节点代表一种特定的输出函数,称为激励函数。每个神经元之间的连接都代表一个对于通过该连接信号的加权值,称为权重,这相当于人工神经网络的记忆。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2,感知器
    单层感知器:单层前向网络,只有一层处理单元的感知器,单层感知器模型如图所示:
    在这里插入图片描述
    学习算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    仿真例子1:点分类
    在这里插入图片描述

    循环实现:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    工具箱实现:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    在这里插入图片描述
    仿真例子2:或运算
    在这里插入图片描述
    工具箱实现(循环类似只给出工具箱实现)
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    2,线性神经网络
    线性神经网络与感知器神经网络不同之处在于,每个神经元的传递函数为线性函数,因此感知器神经网络的输出只能是0或1,线性神经网络的输出可以取任意值
    在这里插入图片描述
    在这里插入图片描述
    线性神经网络模型是具有多个神经元的模型,具有n个输入的单层(m个神经元)线性神经元网络。
    在这里插入图片描述
    可通过添加非线性元素,解决线性不可分问题。
    在这里插入图片描述
    学习规则:
    1什么是梯度下降算法:
    在这里插入图片描述
    2.均方误差最小的学习规则(LMS)

    当不能直接求出网络权值和阈值时,可采用该规则计算。该规则是一种沿误差最陡下降方向负梯度方向)对前一步权值进行修正的方法。沿此方向以适当强度对权值进行修正,就能最终达到最佳权值。
    在这里插入图片描述
    在这里插入图片描述
    MATLAB神经网络工具箱中与线性神经网路有关的主要函数
    在这里插入图片描述
    仿真例子1:与运算
    在这里插入图片描述
    在这里插入图片描述
    循环实现:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    在这里插入图片描述
    工具箱实现:
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    两个实际例子:
    在这里插入图片描述
    在这里插入图片描述
    结果:
    在这里插入图片描述
    在这里插入图片描述
    自适应线性神经元的输入向量为随机噪声n1,余弦信号和随机信号之和为目标向量,输出信号为网络调整过程中的误差信号。
    程序:
    在这里插入图片描述
    结果:
    在这里插入图片描述
    说明
    adapt可以自适应调整网络的权值和阈值
    train是批输入,一次性输入,网络参数进行一次调整。
    adapt是既可以批输入,也可以增长输入(一个一个输入),可在线学习

    4.BP神经网络
    线性神经网络只能解决线性可分的问题,这与其单层网络接构有关。而BP神经网络包含多个隐含层,具备处理线性不可分的问题的能力。

    BP网络是一种多层前馈神经网络,由输入层,隐含层和输出层组成。
    

    在这里插入图片描述
    注意:反向传播不是反馈,网络根据误差从后向前逐层进行修正,而反馈结构是输出层的输出值又连接到输入神经元作为下一次计算的输入。

    在这里插入图片描述
    BP学习算法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    图示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    BP算法流程图:
    在这里插入图片描述
    BP神经网络工具箱函数:
    在这里插入图片描述
    注意:
    归一化:将数据映射到[0,1]或[-1,1]或者其他区间。
    为什么归一化?
    (1)输入数据单位不一样,有些数据的范围特别大,导致神经网络收敛慢,训练时间长。
    (2)数据范围大的输入在模式分类中的作用可能偏大,范围小的作用可能偏小。
    (3)由于输出层激活函数的值域有限制,需将数据映射到激活函数的值域。
    在这里插入图片描述
    在这里插入图片描述
    例1.公路客运量和货运量预测(不使用工具箱)
    在这里插入图片描述
    通过前20年的数据来预测后两年的运输情况。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    在这里插入图片描述
    例2.非线性函数拟合
    使用BP神经网络实现对非线性函数拟合在这里插入图片描述
    程序(工具箱实现):
    在这里插入图片描述
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    例3 汽油辛烷值预测
    在这里插入图片描述
    针对采集到的60组汽油样本,利用近红外线光谱仪,每个样本的光谱曲线由401个波点,同时测得其辛烷值含量,利用BP神经网络建立汽油红外光谱及其辛烷值的数学模型,并对模型性能进行评价。
    在这里插入图片描述
    程序(工具箱):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    仿真结果:
    在这里插入图片描述
    在这里插入图片描述
    完整ppt下载:
    ppt
    完整程序下载:
    程序
    参考文献:
    MATLAB神经网络超级学习手册 [刘冰,郭海霞 编著] 2014年版
    MATLAB神经网络原理与实例精解
    炼数成金:机器学及其matlab实现—从基础到实践
    梯度下降参考博客:https://blog.csdn.net/red_stone1/article/details/80212814

    展开全文
  • BP神经网络和感知器有什么区别

    千次阅读 2017-02-04 20:45:10
    BP神经网络和感知器有什么区别? 推荐于2016-11-15 01:48:08 1、BP神经网络,指的是用了“BP算法”进行训练的“多层感知器模型”。   2、感知器(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型...

    BP神经网络和感知器有什么区别?


    推荐于2016-11-15 01:48:08 1、BP神经网络,指的是用了“BP算法”进行训练的“多层感知器模型”。

      
    2、感知器(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出的数据集上,可以解决任何线性不可分问题。
    3、多层感知器就是指得结构上多层的感知器模型递接连成的前向型网络。BP就是指得反向传播算法
    
    
    展开全文
  • 神经网络第3讲 前馈神经网络-感知器.doc
  • matlab,感知器,Matlab关于感知器神经网络设计
  • 应用神经网络基本原理,实现了感知器神经网络算法,可以在此基础上开始其他神经网络算法
  • 多层感知器神经网络

    2019-01-03 20:40:20
    理解多层感知器用于分类的原理方法,特别是解决非线性多类别分类问题,利用实际数据进行分类处理。
  • 基于感知器人工神经网络的印刷字符识别系统的实现
  • 单层感知器神经网络matlab代码在MATLAB中使用神经网络进行MNIST数据库手写体检测 由J.Barhydt 1 华盛顿大学华盛顿州西雅图市98195 概述: 对于涉及不可思议的大型数据集的机器学习任务,神经网络(NNs)的使用已变得...
  • 神经网络有许多类型,最重要的是多层感知器,其中最典型的神经元模型称为感知器,本文中我们将从数学角度解读这个模型。 感知器组成 神经网络最主要的组成是神经元,感知器是最常用的模型。以下为感知器图解: ...
  • 在MATLAB中编写感知器神经网络程序,可以进行神经网络的学习应用。主要针对的是感知器神经网络,包括全部源码资料。
  • matlab感知器神经网络初步学习程序,包括详细的代码资料讲解注释
  • 感知器神经网络的学习训练3. 二输入感知器分类可视化问题4. 标准化学习规则训练奇异样本5. 设计多个感知器神经元解决分类问题 1. 感知器神经网络的构建 1.1 生成网络 net=newp([0 2],1);%单输入,输入值为[0,2]...
  • 感知器神经网络 matlab

    2013-09-08 21:26:50
    人工神经网络最简单的感知器模型,利用matlab神经网络工具箱实现。
  • 感知机的matlab代码,这是.m文件,把中文名改成英文的就能用了,因为老版本的matlab不能识别中文名 感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例
  • 主要为大家详细介绍了python实现神经网络感知器算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 单层感知器神经网络

    千次阅读 2014-06-05 11:40:53
    /*****************************************************/ /* 版权: 转载请注明来自mni2005的.../* 作者: 莫问 /* 日期: 2014-06-04 /* 描述: 用逻辑与或运算,完成单层感知器神经网络测试 /************************
  • 感知器神经网络作用: 用于简单的模式分类问题。 原理: 将R个输入变量Pi赋予不同权值后相加,并加入偏差。 网络传递函数: 阈值函数hardlim。 感知器学习规则: 输入输入样本Pi,期望目标Ti,将...
  • 神经网络感知器算法,非常不错 简单易懂,最基础的感知器
  • 用Python实现多层感知器神经网络

    千次阅读 2020-09-07 23:01:29
    我将介绍在Python中创建多层感知器(MLP)神经网络的基本知识。 感知器神经网络的基本组成部分。感知器的输入函数是权重,偏差输入数据的线性组合。具体来说:in_j = weight input + bias.(in_j =权重输入+偏差)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,213
精华内容 16,885
关键字:

感知器和神经网络区别