精华内容
下载资源
问答
  • BP神经网络算法:将参数矩阵向量化

    千次阅读 2018-04-16 02:57:45
    上一篇《机器学习:神经网络的代价函数及反向传播算法》记录了如何使用反向传播算法计算代价函数的导数,其中一个细节就是需要把参数矩阵表达式展开成向量的形式,以便在后来使用高级的优化算法。Ng 老师在讲展开...

     

    上一篇《机器学习:神经网络的代价函数及反向传播算法》记录了如何使用反向传播算法计算代价函数的导数,其中一个细节就是需要把参数的矩阵表达式展开成向量的形式,以便在后来使用高级的优化算法。Ng 老师在讲展开参数(Unrolling Parameters)这部分时,比较粗略。自己补了一下视频里提到的内容,在这里总结记录一下~

    基于 Matlab 实现 unrolling parameters,有以下步骤:

    function[jVal, gradient] = costFunction(theta)
    optTheta = fminunc(@costFunction, initialTheta, options)

    其中,fminunc() 是 Matlab 中内置的一个函数,其官方介绍如下:

    Find minimum of unconstrained multivariable function
    Nonlinear programming solver.
    Finds the minimum of a problem specified by minf(x) ,
    where f(x) is a function that returns a scalar.
    x is a vector or a matrix.

    fminunc() 可以用来解决无约束非线性优化问题,帮助我们找到多变量函数的最小值,其中一种形式为:

    x = fminunc(fun,x0,options)

    那么再回头看 optTheta = fminunc(@costFunction, initialTheta, options) 这个式子,其中第一个输入参数 fun 定义为 @costFunction (@ 是Matlab中的句柄函数的标志符,即间接的函数调用方法);第二个参数定义为 initialTheta,它是一个向量,是需要用户来自定义的,使用前需要初始化;第三个参数 options 是一个结构体,可以通过 optimset 来设置它,包括 GradObj 和 Maxlter 两个参数,GradObj 指明知否使用用户自定义的梯度下降公式,Maxlter 用来设置迭代次数。

    ▶️设置 options 的小例子:

    options = optimset('GradObj', 'on', 'MaxIter', 100);
    

    介绍完了 fminunc() 方法,再看这两个式子:

    function[jVal, gradient] = costFunction(theta)
    optTheta = fminunc(@costFunction, initialTheta, options)

    其中 gradient、theta、initialTheta 都需要为向量形式,而神经网络中的参数为矩阵形式:

    \Theta^{(1)},\Theta^{(2)},\Theta^{(3)},... (权重矩阵)

    D^{(1)},D^{(2)},D^{(3)},... (梯度矩阵)

    所以,为了方便使用高级的算法对神经网络参数进行优化,我们就需要将这些矩阵形式的参数向量化,就可以将其传入 initialTheta 和 theta,并且得到梯度的返回值 gradient 了~

    Ng 老师在课程中使用 Octave 做了过程的演示,很简单就不在此赘述了。


    ⬇️ 扫描下方二维码关注公众号【数据池塘】 ⬇️

    回复【算法】,获取最全面的机器学习算法网络图:

    展开全文
  • 这是基于矩阵的数据的学习模型。 当训练样本很小或输入是矩阵时,它可能比标准的基于向量的... 该模型可以解释为具有矩阵输入的线性神经网络。 你可以在http://pd.hacker.lt/linear_mnn.pdf看到理论(目前只有草稿)
  • 基于BP神经网络PID控制+Simulink仿真

    万次阅读 多人点赞 2019-05-30 10:58:30
    最近在学习电机的智能控制,上周学习了基于...利用BP神经网络可以建立参数Kp,Ki,Kd自整定的PID控制器。基于BP神经网络的PID控制系统结构框图如下图所示: 控制器由两部分组成:经典增量式PID控制器;BP神经网络 ...

        最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。

        神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP神经网络可以建立参数Kp,Ki,Kd自整定的PID控制器。基于BP神经网络的PID控制系统结构框图如下图所示:

        控制器由两部分组成:经典增量式PID控制器;BP神经网络

        经典增量式PID控制器

        

        BP神经网络控制算法

        BP神经网络结构如下图所示:

        它是一种有隐含层的3层前馈网络,包括输入层、隐含层和输出层。输出层的三个输出分别对应PID控制器的三个可调参数Kp、Ki和Kd。由于Kp、Ki和Kd不能为负,所以输出层神经元的变换函数取非负的Sigmoid函数,而隐含层神经元的变换函数可取正负对称的Sigmoid函数。

        BP神经网络的输入(M为输入变量的个数):

        隐含层的输入输出为:

        输出层的输入输出:

         采用以输出误差二次方为性能指标,其性能指标函数为:

        按照梯度下降法修正网络的加权系数,并附加一使搜索快速收敛全局极小的惯性项,则有BP神经网络输出层的加权系数修正公式为:

        同理,可得隐含层加权系数的计算公式为:

        由此,BP神经网络PID控制算法可总结为:

        (1)确定BP神经网络结构,即确定输入层和隐含层的节点个数,选取各层加权系数的初值wij(0)、wli(0),选定学习速率和惯性系数,此时k=1

        (2)采样给定和反馈信号,即r(k)和y(k),计算误差e(k)=r(k)-y(k)

        (3)确定输入量

        (4)根据上述公式,计算各层神经元的输入、输出,神经网络输出层即为PID控制器的三个可调参数Kp、Ki和Kd

        (5)由增量式PID控制公式,计算PID控制器的控制输出u(k)

        (6)进行神经网络学习,实时自动调整输出层和隐含层的加权系数wli(k)和wij(k),实现PID控制参数的自适应调整

        (7)置k=k+1,返回步骤(2)

        Matlab Simulink仿真建模

        输入为阶跃信号,其参数为默认值,一个简单的闭环控制系统。BP神经网络PID控制器的内部结构如下图所示:

        S-function的输入为:u=[e(k);e(k-1);e(k-2);y(k);y(k-1);r(k);u(k-1);隐含层+输出层权值系数(k-2);隐含层+输出层权值系数(k-1)]=

    [u(1);u(2);u(3);u(4);u(5);u(6);u(7);...u(隐含层权值个数+输出层权值个数)],把所有的权值系数从输出再返回到输入是为了更新权值矩阵,从而自适应的调整PID三个参数。关于S-function的使用方法,请参考我写的另一篇博客:           https://blog.csdn.net/weixin_42650162/article/details/90488610

        S-function函数

        下面是S-function函数编写的控制算法:

        为了更好的理解下面的程序代码,先要理解Matlab中的几个函数

        通过(:)把一个矩阵变为一个列向量

        通过reshape函数,从列向量里任意组成矩阵如c=reshape(b,3,8),b中元素按顺序排成一个3*8的矩阵,也就是还原了矩阵a,

        c=reshape(b(10:24),3,5),b中第10个元素到第24个元素,按顺序排成一个3*5的矩阵。

        在我编写的S-function函数中,就是通过reshape函数,把输入的隐含层+输出层的列权值系数还原成:隐含层权值系数矩阵+输出层权值系数矩阵,通过算法完成这两个权值系数矩阵的更新。

        下面是M文件编写的S-function控制算法:

    function [sys,x0,str,ts,simStateCompliance] = nnbp(t,x,u,flag,T,nh,xite,alfa)
    switch flag,
      case 0,
        [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh);
    %初始化函数
      case 3,
        sys=mdlOutputs(t,x,u,nh,xite,alfa);
    %输出函数
      case {1,2,4,9},
        sys=[];
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh)
    %调用初始画函数,两个外部输入参数 参数T确定采样时间,参数nh确定隐含层层数
    sizes = simsizes;
    sizes.NumContStates  = 0;
    sizes.NumDiscStates  = 0;
    sizes.NumOutputs     = 4+6*nh;
    %定义输出变量,包括控制变量u,三个PID参数:Kp,Ki,Kd,隐含层+输出层所有加权系数
    sizes.NumInputs      = 7+12*nh;
    %定义输入变量,包括前7个参数[e(k);e(k-1);e(k-2);y(k);y(k-1);r(k);u(k-1)]
    %隐含层+输出层权值系数(k-2),隐含层+输出层权值系数(k-1)
    sizes.DirFeedthrough = 1;
    sizes.NumSampleTimes = 1; 
    sys = simsizes(sizes);
    x0  = [];
    str = [];
    ts  = [T 0];
    simStateCompliance = 'UnknownSimState';
    function sys=mdlOutputs(t,x,u,nh,xite,alfa)
    %调用输出函数
    wi_2 = reshape(u(8:7+3*nh),nh,3);
    %隐含层(k-2)权值系数矩阵,维数nh*3
    wo_2 = reshape(u(8+3*nh:7+6*nh),3,nh);
    %输出层(k-2)权值系数矩阵,维数3*nh
    wi_1 = reshape(u(8+6*nh:7+9*nh),nh,3);
    %隐含层(k-1)权值系数矩阵,维数nh*3
    wo_1 = reshape(u(8+9*nh:7+12*nh),3,nh);
    %输出层(k-1)权值系数矩阵,维数3*nh
    xi = [u(6),u(4),u(1)];
    %神经网络的输入xi=[u(6),u(4),u(1)]=[r(k),y(k),e(k)]
    xx = [u(1)-u(2);u(1);u(1)+u(3)-2*u(2)];
    %xx=[u(1)-u(2);u(1);u(1)+u(3)-2*u(2)]=[e(k)-e(k-1);e(k);e(k)+e(k-2)-2*e(k-1)]
    I = xi*wi_1';
    %计算隐含层的输入,I=神经网络的输入*隐含层权值系数矩阵的转置wi_1',结果为:
    %I=[net0(k),net1(k)...netnh(k)]为1*nh矩阵
    Oh = exp(I)./(exp(I)+exp(-I));
    %激活函数,可更改
    %计算隐含层的输出,(exp(I)-exp(-I))./(exp(I)+exp(-I))为隐含层的激活函数Sigmoid
    %Oh=[o0(k),o1(k)...onh(k)],为1*nh的矩阵
    O = wo_1*Oh';
    %计算输出层的输入,维数3*1
    K = 2./(exp(O)+exp(-O)).^2;
    %激活函数,可更改
    %计算输出层的输出K=[Kp,Ki,Kd],维数为1*3
    %exp(Oh)./(exp(Oh)+exp(-Oh))为输出层的激活函数Sigmoid
    uu = u(7)+K'*xx;
    %根据增量式PID控制算法计算控制变量u(k)
    dyu = sign((u(4)-u(5))/(uu-u(7)+0.0000001));
    %计算输出层加权系数修正公式的sgn
    %sign((y(k)-y(k-1))/(u(k)-u(k-1)+0.0000001)近似代表偏导
    dK = 2./(exp(K)+exp(-K)).^2;
    %激活函数,可更改
    delta3 = u(1)*dyu*xx.*dK;
    wo = wo_1+xite*delta3*Oh+alfa*(wo_1-wo_2);
    %输出层加权系数矩阵的修正
    dOh = 2./(exp(Oh)+exp(-Oh)).^2;
    %激活函数,可更改
    wi = wi_1+xite*(dOh.*(delta3'*wo))'*xi+alfa*(wi_1-wi_2);
    %隐含层加权系数修正
    sys = [uu;K(:);wi(:);wo(:)];
    %输出层输出sys=[uu;K(:);wi(:);wo(:)]=
    %[uu;Kp;Ki;Kd;隐含层+输出层所有权值系数]
    %K(:),wi(:),wo(:),把这三个矩阵按顺序排为列向量

        本函数有四个外部输入变量:T,nh,xite,alfa T输入采样时间,nh确定隐含层层数,xite和alfa权值系数修正公式里的学习速率和惯性系数。

        为了更好地分配S-function的输出,需要对Demux进行如下设置:

        确保前三个输出变量为:控制变量u,Kp,Ki,Kd,剩下的变量为隐含层权值系数矩阵+输出层权值系数矩阵总数之和。

        然后对此S-function函数进行封装:

    具体过程可以参考我的另一篇博客:

        https://blog.csdn.net/weixin_42650162/article/details/90488610

        

        完成后点击S-function函数,会弹出外部参数设置框,设置参数如下:

        注:T采样时间要和设置的控制算法的采样时间一样,不然会报错,如下:

        下面是仿真结果:

        Kp、Ki、Kd的自适应变化曲线:

        Kp:

        Ki:

        Kd:

        有关仿真的所有资源已上传,如有需要可自行下载:

        https://download.csdn.net/download/weixin_42650162/11216367

    展开全文
  • 卷积神经网络架构

    万次阅读 多人点赞 2018-11-20 17:14:48
    卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的...

    卷积神经网络(conv)架构

    卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。

    1.全连接神经网络和卷积神经网络的区别

    全连接神经网络:
    在这里插入图片描述
    卷积神经网络图:
    在这里插入图片描述
    共同点: 图中每一个节点都代表一个神经元,没相邻两层之间的节点都有边相;输入输出的流程基本一致。
    不同点: 卷积神经网络相邻两层之间只有部分的节点相连,所以一般会将每一层的卷积层组织成一个三维矩阵。
    卷积神经网络的优点: 在图像处理方面,对于MNIST数据,每一张图片的大小是28281,其中28*28为图片的大小,1表示只有一个彩色通道,并且这里的图像的颜色为黑白。假设第一层隐藏层的节点数位500个,那么一个全连接层的神经网络将有28 * 28 * 500+500=392500个参数。其中**+500**表示的是basic值。而当图片更大的时候,通道数增加的的时候,所需要的参数的数量会更大,会达到百万级,甚至千万级。随着参数的增多,计算速度会随之减慢,还容易导致过度拟合问题。

    2.卷积神经网络

    卷积神经网络构架图:
    在这里插入图片描述

    1.输入层

    在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。通常为(length * width *channel)。 三维矩阵的深度代表了图像的彩色通道(channel)。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的三维矩阵,直到最后的全连接层。

    2.卷积层

    是卷积网络中最为重要的部分。和传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小快常用的大小有3 * 3或者5 * 5,卷积层会增加原始节点的深度。通常卷积层这部分被称为过滤器(filetr) 或者 内核(kernel)
    过滤器: 将当前的神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵,但深度不限的节点矩阵。
    过滤器示意图:
    在这里插入图片描述
    过滤器的尺寸: 过滤器的所处理的节点矩阵的长和宽就是这个过滤器的长和宽的尺寸。而过滤器的深度则是有需要人工指定设置和处理的。
    卷积层例子: 过滤器将一个 2 * 2 * 3 的节点矩阵变化为一个1 * 1 * 5的单位节点矩阵。那么该卷积层的需要**2 * 2 * 2 3 5 + 5 = 65 个参数。其中最后的+5为偏置项的个数。假设用wi来表示第i个权重,bi表示偏置项的参数。上述所示的公式为:
    在这里插入图片描述
    传播的过程: 卷积层的前向传播过程是将一个过滤器从神经网络当前层的 左上角移动到右下角,并且在移动过程中计算每一个对应的单位矩阵。移动的例图 (步长为1)在这里插入图片描述
    全0填充(zero-padding)–改变结果矩阵的大小(1): 为了 避免尺寸的变化,可以在当前层矩阵的边界加入全0填充。这样可以使得卷积层前向传播结果的矩阵大小和当前层矩阵保持一致。示意图:
    在这里插入图片描述
    **改变移动步长–改变结果矩阵的大小(2):**当改变过滤器的移动步长,可以改变结果矩阵的尺寸大小,示意图:
    在这里插入图片描述
    计算结果矩阵的大小的尺寸:
    1.使用全0填充时:
    在这里插入图片描述
    2.不使用全0填充:
    在这里插入图片描述
    in_length:输入节点的长度,in_width:输入节点的宽度,side_length:移动的步长,filter_length过滤器的长度,filter_width表示过滤器的宽度。

    3.池化层(Pooling)

    池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中的参数的目的。
    效果: 使用池化层既可以加快计算速度也可以防止过度拟合
    使用: 同样类似卷积层,但是并不是计算节点的加权和,而是采用更加简单的最大值或者平均值运算最大池化层(max pooling) 使用最大值操作,是被使用得最多的池化层结构。平均池化层(average pooling) 使用平均值操作。注意: 池化层不仅需要在长和宽的维度上移动,它还需要在深度的维度上移动,且每次的过滤器可能是 不同的 。如图:
    在这里插入图片描述

    4.全连接层

    在经过几轮的卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提出的过程。在此之后,我们仍需使用全连接层来完成分类任务。

    5.Softmax层。

    Softmax层主要用于分类问题,我们可以得到当前样例属于不同种类的概率分布情况。

    以上所有内容均为小编在看书后做的一些笔记总结。

    展开全文
  • 吴恩达神经网络与深度学习——深度神经网络

    千次阅读 多人点赞 2018-11-02 23:03:07
    吴恩达神经网络与深度学习——浅层神经网络深层神经网络 深层神经网络

    深度神经网络

    在这里插入图片描述

    符号

    在这里插入图片描述

    l:层数
    l = 4
    n^[l]:每一次的单元数
    n^[1] = 5 n^[2] = 5 n^[3] = 3 n^[4] = 1
    a^[l]:每一次的激活函数
    a^[l] = g^[l](z^[l])
    w^[l]:每一次的权值
    b^[l]:每一次的偏置
    

    前向传播

    在这里插入图片描述

    x
    z^[1] = w^[1]x + b^[1]
    a^[1] = g^[1](z^[1])
    z^[2] = w^[2]a^[1] + b^[2]
    a^[2] = g^[2](z^[2])
    z^[3] = w^[3]a^[2] + b^[3]
    a^[3] = g^[3](z^[3])
    z^[4] = w^[4]a^[3] + b^[4]
    a^[4] = g^[4](z^[4])
    
    for l =1 to 4
        z^[l] = w^[l]a^[l-1] + b^[l]
        a^[l] = g^[l](z^[l])
    
    #m个样本向量化
    Z^[1] = W^[1]A^[0] + b^[1]      #  X=A^[0]
    A^[1] = g^[1](Z^[1])
    Z^[2] = W^[2]A^[1]+ b^[2]
    A^[2] = g^[2](z^[2])
    Z^[3] = W^[3]A^[2] + b^[3]
    A^[3] = g^[3](Z^[3])
    Z^[4] = W^[4]A^[3] + b^[4]
    A^[4] = g^[4](Z^[4])
    
    for l = 1 to 4
    	    Z^[l] = w^[l]A^[l-1] + b^[l]
    	    A^[l] = g^[l](Z^[l])
    

    矩阵维度

    在这里插入图片描述

    n^[0] = 2
    n^[1] = 3
    n^[2] = 5
    n^[3] = 4
    n^[4] = 2
    n^[4] = 1
    z^[1]        =      w^[1]               x            +        b^[1]
    (3,1)               (3,2)             (2,1)                   (3,1)
    (n^[1],1)        (n^[1],n^[0])       (n^[0],1)              (n^[1],1)
    a^[1] = g^[1](z^[1])
    (3,1)         (3,1)
    (n^[1],1)   (n^[1],1)
    z^[2]        =      w^[2]             a^[1]             +     b^[1]
    (5,1)               (5,3)             (3,1)                   (5,1)
    (n^[2],1)        (n^[2],n^[1])       (n^[1],1)              (n^[2],1)
    a^[2] = g^[2](z^[2])
    (5,1)         (5,1) 
    (n^[2],1)   (n^[2],1)  
    z^[3]        =      w^[3]             a^[2]             +     b^[3]
    (4,1)               (4,5)             (5,1)                   (4,1)
    (n^[3],1)        (n^[3],n^[2])       (n^[2],1)              (n^[3],1)
    a^[3] = g^[3](z^[3])
    (4,1)         (4,1)  
    (n^[3],1)   (n^[3],1)  
    z^[4]        =      w^[4]             a^[3]             +     b^[4]
    (2,1)               (2,4)             (4,1)                   (2,1)
    (n^[4],1)        (n^[4],n^[3])       (n^[3],1)              (n^[4],1)
    a^[4] = g^[4](z^[4])
    (2,1)         (2,1)        
    (n^[4],1)    (n^[4],1)    
    z^[5]        =      w^[5]             a^[4]             +     b^[5]
    (1,1)               (1,2)             (2,1)                   (1,1)
    (n^[5],1)        (n^[5],n^[4])       (n^[4],1)              (n^[5],1)
    a^[5] = g^[5](z^[5])
    (1,1)         (1,1)        
    (n^[5],1)    (n^[5],1)    
    
    for l = 1 to 5
    	    z^[l]     =   w^[l]            a^[l-1]         +       b^[l]
    	    (n^[l],1)    (n^[l],n^[l-1])  (n^[l-1],1)            (n^[l],1)
    	    a^[l] = g^[l](z^[l])
    	    (n^[l],1)    (n^[l],1) 
    

    m个样本

    Z^[1]        =      W^[1]               X            +        b^[1]
    (3,m)               (3,2)             (2,m)                   (3,1)
    (n^[1],m)        (n^[1],n^[0])       (n^[0],m)              (n^[1],1)
    A^[1] = g^[1](Z^[1])
    (3,m)         (3,m)
    (n^[1],m)   (n^[1],m)
    Z^[2]        =      W^[2]             A^[1]             +     b^[1]
    (5,m)               (5,3)             (3,m)                   (5,1)
    (n^[2],m)        (n^[2],n^[1])       (n^[1],m)              (n^[2],1)
    A^[2] = g^[2](Z^[2])
    (5,m)         (5,m) 
    (n^[2],m)   (n^[2],m)  
    Z^[3]        =      W^[3]             A^[2]             +     b^[3]
    (4,m)               (4,5)             (5,m)                   (4,1)
    (n^[3],m)        (n^[3],n^[2])       (n^[2],m)              (n^[3],1)
    A^[3] = g^[3](Z^[3])
    (4,m)         (4,m)  
    (n^[3],m)   (n^[3],m)  
    Z^[4]        =      W^[4]             A^[3]             +     b^[4]
    (2,m)               (2,4)             (4,m)                   (2,1)
    (n^[4],m)        (n^[4],n^[3])       (n^[3],m)              (n^[4],1)
    A^[4] = g^[4](Z^[4])
    (2,m)         (2,m)        
    (n^[4],m)    (n^[4],m)    
    Z^[5]        =      W^[5]             A^[4]             +     b^[5]
    (1,m)               (1,2)             (2,m)                   (1,1)
    (n^[5],m)        (n^[5],n^[4])       (n^[4],m)              (n^[5],1)
    A^[5] = g^[5](Z^[5])
    (1,m)         (1,m)        
    (n^[5],m)    (n^[5],m)    
    
    for l = 1 to 4
    	    Z^[l]    =    w^[l]              A^[l-1]   +     b^[l]
    	    (n^[l],m)    (n^[l],n^[l-1])   (n^[l-1],m)     (n^[l],1)
    	    A^[l] = g^[l](Z^[l])
          (n^[l],m)     (n^[l],m)
    

    为什么使用深层表示

    深度神经网络有很多的隐层,较早的前几层能学习一些低层次的简单特征,后几层就能将简单的特征结合起来去探测更加复杂的东西
    
    

    搭建深层神经网络块

    在这里插入图片描述

    第l层参数: w^[l],b^[l]
    前向传播: 输入 a^[l-1] 输出 a^[l]  存储 z^[l]
    					z^[l] = w^[l]a^[l-1] + b^[l]
    					a^[l] = g^[l](z^[l])
    反向传播: 输入 da^[l]   输出da^[l-1]  dw^[l] db^[l]
    					前向传播存储的z^[l] 					
    					
    

    在这里插入图片描述

    正向传播和反向传播

    在这里插入图片描述

    从a^[0]开始,也就是x,经过一系列正向传播计算得到yhat,之后再用输出值计算实现反向传播,得到所有的导数项,w,b也在每一层更新
    
    编程细节:将z^[l],w^[l],b^[l]存储
    

    前向和反向传播

    前向传播

    前向传播: 输入 a^[l-1] 输出 a^[l]  存储 z^[l]
    					z^[l] = w^[l]a^[l-1] + b^[l]
    					a^[l] = g^[l](z^[l])
    		向量化:
    					Z^[l] = W^[l]A^[l-1] + b^[l]
    					A^[l] = g^[l](Z^[l])
    

    反向传播

    反向传播: 输入 da^[l]   输出da^[l-1]  dw^[l] db^[l]
    					dz^[l] = da^[l]*g'^[l](z^[l])
    					dw^[l] = dz^[l]a^[l-1]
    					db^[l] = dz^[l]
    					da^[l-1] = w^[l]Tdz^[l]
    					dz^[l] = w^[l+1]Tdz^[l+1]*g'^[l](z^[l])
    		向量化:
    					dZ^[l] = dA^[l]*g'^[l](Z^[l])
    					dW^[l] =(1/m)dZ^[l]A^[l-1]T
    					db^[l] = (1/m)np.sum(dZ^[l],axis = 1,keepdims = True)
    					dA^[l-1] = W^[l]TdZ^[l]
    					dZ^[l] = W^[l+1]TdZ^[l+1]*g'^[l](Z^[l])
    

    在这里插入图片描述

    参数和超参数

    参数: w^[1],b^[1],w^[2],b^[2]...
    超参数:
    			学习率:alpha
    			循环下降法的迭代次数:iteration
    			隐藏层数:l
    			隐藏单元数:n^[1],n^[2]...
    			激活函数:sigmoid ,relu, tanh
    			
    

    和大脑的关系

    在这里插入图片描述

    展开全文
  • MATLAB--基于BP神经网络的手写数字识别

    千次阅读 多人点赞 2020-03-06 21:12:13
    MATLAB–基于BP神经网络的手写数字识别 在干活的过程中整理下来的,希望对大家有帮助。 手写数字识别技术作为图像处理和模式识别中的研究热点,在大规模数据统计(如行业年检、人口普查等)、票据识别、财务报表、...
  • 到此,我们已经讲完了构建并训练出一个神经网络的流程和其中的计算细节。但仅仅是知道这些还不够,要想编写代码去实现这样一个过程,我们需要将上述的计算过程矩阵化。 什么是矩阵化呢?就是说,原来我们一个样本一...
  • 机器学习-预测之BP神经网络模型原理及实战

    万次阅读 多人点赞 2019-03-17 15:14:39
    BP神经网络模型
  • 神经网络参数初始化总结分析

    千次阅读 2020-01-08 16:12:19
    神经网络参数主要是权重(weights):W, 和偏置项(bias):b。 训练神经网络的时候需先给定一个初试值,才能够训练,然后一点点地更新,但是不同的初始化方法,训练的效果可能会截然不同。 目录 1、全0...
  • 【机器学习】广义回归神经网络(GRNN)的python实现

    万次阅读 多人点赞 2018-12-12 21:29:34
    【机器学习】广义回归神经网络(GRNN)的python实现一、广义回归神经网络原理1.1、GRNN与PNN的关系2.2、GRNN的网络结构二、广义回归神经网络的优点与不足2.1、优点2.2、不足三、GRNN的python实现参考资料 ...
  • BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络神经网络是把生活中的常见情节推广到计算仿真的范畴,这样...
  • 目录写在前面深度神经网络结构矩阵表达总结 写在前面   最近准备使用深度神经网络来训练棋类模型,所以准备好好学习一下神经网络各种参数结构;重在使用,所以不会按照顺序详细讲解神经网络过程,本篇博客属于...
  • 卷积神经网络入门详解

    万次阅读 多人点赞 2017-11-08 15:52:14
      本文主要内容为 CS231n 课程的学习笔记,主要参考 学习...  在之前的博客《十四、卷积神经网络(1):介绍卷积神经网络》《十五、卷积神经网络(2):卷积神经网络的结构》中只是介绍性的阐述了一些关于卷积神...
  • 基于S函数的BP神经网络PID控制器及simulink仿真

    万次阅读 多人点赞 2019-12-05 13:51:58
    基于S函数的BP神经网络PID控制器及simulink仿真 文章目录文章来源和摘要S函数的编写格式和运行步骤simulink模型结构S函数模型初始化部分代码理解S函数模型更新部分S函数模型输出部分S函数完整代码附录 文章来源和...
  • 利用BP神经网络进行函数拟合

    万次阅读 多人点赞 2020-01-11 19:27:48
    数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最高,本文选取线性项加激活函数组成一个非线性模型,利用神经网络算法最优确定模型中的未知参数,利用随机搜索的方式确定函数模型...
  • # 矩阵乘以数组 A = np.array([[1,2],[3,4],[5,6]]) A.shape # (3, 2) B = np.array([7,8]) B.shape # (2,) A.dot(B) # array([23, 53, 83]) END.
  • 卷积神经网络详解

    千次阅读 2019-11-15 16:29:59
    说到卷积神经网络,就不得不先说一下神经网络,不论卷积神经网络也好,还是其他的一些深度神经网络也好,都是在最原始的(人工)神经网络的基础之上发展出来的。 我们所说的神经网络其实是人工神经网络的简称,它可以...
  • 《MATLAB神经网络编程》 化学工业出版社 读书笔记 第四章 前向型神经网络 4.3 BP传播网络 本文是《MATLAB神经网络编程》书籍的阅读笔记,其中涉及的源码、公式、原理都来自此书,若有不理解之处请参阅原书
  • 《MATLAB神经网络30个案例分析》学习笔记

    万次阅读 多人点赞 2016-09-04 20:53:31
     分线性系统建模,拟合参数,用一定量的输入输出数据训练神经网络即可3. 遗传算法优化BP神经网络——非线性函数的拟合,神经网络可以看成一个预测函数,而遗传算法优化BP神经网络可以看成是对预测函数的某些参数...
  • 举例来说,对于二维卷积神经网络,其权重就是卷积核里面的那些值,这些值从上而下,从左到右要将图像中每个对应区域卷积一遍然后将积求和输入到下一层节点中激活,得到下一层的特征图。因此其权重和偏置更新公式与全...
  • 【机器学习】RBF神经网络原理与Python实现

    万次阅读 多人点赞 2018-11-24 19:51:20
    【机器学习】RBF神经网络原理与Python实现一、LSSVM数学原理1. 感知机2. SVM3. LSSVM4. LSSVM与SVM的区别二、LSSVM的python实现参考资料 一、LSSVM数学原理 1. 感知机 SVM是从感知机发展而来。假设有m个训练样本{...
  • 神经网络参数更新

    千次阅读 2017-08-25 14:48:18
    一、参数更新 1.随机梯度下降及各种更新方法 ...这个方法在深度网络上几乎总能得到更好的收敛速度。是从物理角度上对最优化问题得到的启发。它将损失值理解为是山的高度(因此高度势能是U=mgh,
  • 利用MATLAB 进行BP神经网络的预测(含有神经网络工具箱) 最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型、时间序列模型,GM(1,1)模型,可是自己在结合...
  • 为什么需要矩阵化向量化运算过程?numpy在内容实现的时候,对矩阵运行进行了优化,...一个输入样本X由1000000个特征组成的行向量,现在想计算 的值。其中 那么有两种写法:import numpy as np import timedef mod1(X):
  • Python BP神经网络实现

    千次阅读 2018-06-11 20:19:01
    Python_BP神经网络实现(向量化运算、鸢尾花分类测试) 简介 人工神经网络模型种类很多,其中根据网络内数据流向进行分类可以分为前馈网络、反馈网络和自组织网络。 通过对Andrew Ng的深度学习课程的学习,本文...
  • GitHub深度神经网络DBNs有关输入矩阵,标签矩阵,相关参数设置疑问,求指点!!!!!相关问题: 1、输入矩阵train_x结构: 行:样本数量,即每一种N个,一共8×N行样本,本人研究中:N=53 列:每一个样本的属性,...
  • 详解神经网络矩阵实现的梯度计算

    万次阅读 多人点赞 2017-11-09 20:28:14
    神经网络有一定了解的同学知道:一般的神经网络的具体实现都是通过矩阵实现的,包括误差反向传导,梯度计算和更新等等,比如y=w*x+b,这里的所有变量都是矩阵,我们通常会叫w和b为参数矩阵,矩阵相乘首先效率比较...
  • 神经网络参数优化方法

    万次阅读 多人点赞 2018-10-23 14:05:42
    著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络参数优化方法的一些总结和摘录,并不是我自己的结论和做实验所得到的结果。我想Michael的实验结果更有...
  • 卷积神经网络的网络连接具有局部连接、参数共享的特点。局部连接是相对于普通神经网络的全连接而言的,是指这一层的某个节点只与上一层的部分节点相连。参数共享是指一层中多个节点的连接共享相同的一组参数。   ...
  • 对于学过线性代数的人来说,矩阵运算绝对算得上是一场噩梦。特别是做矩阵乘法时,两个大方块,每个方块里面有好多数字,你需要把一个方块中一行里的所有数字跟另一个方块里面的所有数字做乘法,然后再求和,头昏脑涨...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,672
精华内容 27,068
关键字:

参数矩阵输入神经网络