吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

news/2024/4/29 10:44:01/文章来源:https://blog.csdn.net/weixin_43597208/article/details/136909950

目录

  • 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)
    • 第三周:浅层神经网络(Shallow neural networks)
      • 3.1 神经网络概述(Neural Network Overview)
      • 3.2 神经网络的表示(Neural Network Representation)
      • 3.3 计算一个神经网络的输出(Computing a Neural Network's output)
      • 3.4 多样本向量化(Vectorizing across multiple examples)
      • 3.5 向 量 化 实 现 的 解 释 ( Justification for vectorized implementation)

第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)

第三周:浅层神经网络(Shallow neural networks)

3.1 神经网络概述(Neural Network Overview)

本周你将学习如何实现一个神经网络。在我们深入学习具体技术之前,我希望快速的带你预览一下本周你将会学到的东西。如果这个视频中的某些细节你没有看懂你也不用担心,我们将在后面的几个视频中深入讨论技术细节。

现在我们开始快速浏览一下如何实现神经网络。上周我们讨论了逻辑回归,我们了解了这个模型(见图 3.1.1)如何与下面公式 3.1 建立联系。

在这里插入图片描述
接下来使用𝑧就可以计算出𝑎。我们将的符号换为表示输出𝑦^ ⟹ 𝑎 = 𝜎(𝑧),然后可以计算出 loss function 𝐿(𝑎, 𝑦)。

神经网络看起来是如下这个样子(图 3.1.2)。正如我之前已经提到过,你可以把许多sigmoid 单元堆叠起来形成一个神经网络。对于图 3.1.1 中的节点,它包含了之前讲的计算的两个步骤:首先通过公式 3.1 计算出值𝑧,然后通过𝜎(𝑧)计算值𝑎。

在这里插入图片描述
在这个神经网络(图 3.1.2)对应的 3 个节点,首先计算第一层网络中的各个节点相关的数 z [ 1 ] z^{[1]} z[1],接着计算 a [ 1 ] a^{[1]} a[1],在计算下一层网络同理; 我们会使用符号 [𝑚]表示第𝑚层网络中节点相关的数,这些节点的集合被称为第𝑚层网络。这样可以保证 [𝑚]不会和我们之前用来表示单个的训练样本的 (𝑖)(即我们使用表示第 i 个训练样本)混淆; 整个计算过程,公式如下: 公式 3.3:

在这里插入图片描述
类似逻辑回归,在计算后需要使用计算,接下来你需要使用另外一个线性方程对应的参数计算 z [ 2 ] z^{[2]} z[2], 计算 a [ 2 ] a^{[2]} a[2],此时 a [ 2 ] a^{[2]} a[2]就是整个神经网络最终的输出,用 y ^ \hat{y} y^表示网络的输出。

在这里插入图片描述
我知道这其中有很多细节,其中有一点非常难以理解,即在逻辑回归中,通过直接计算𝑧得到结果𝑎。而这个神经网络中,我们反复的计算𝑧和𝑎,计算𝑎和𝑧,最后得到了最终的输出 loss function。

你应该记得逻辑回归中,有一些从后向前的计算用来计算导数𝑑𝑎、𝑑𝑧。同样,在神经网络中我们也有从后向前的计算,看起来就像这样,最后会计算 d a [ 2 ] 、 d z [ 2 ] da^{[2]} 、dz^{[2]} da[2]dz[2],计算出来之后,然后计算计算 d w [ 2 ] 、 d b [ 2 ] dw^{[2]}、db^{[2]} dw[2]db[2] 等,按公式 3.4、3.5 箭头表示的那样,从右到左反向计算。

现在你大概了解了一下什么是神经网络,基于逻辑回归重复使用了两次该模型得到上述例子的神经网络。我清楚这里面多了很多新符号和细节,如果没有理解也不用担心,在接下来的视频中我们会仔细讨论具体细节。

那么,下一个视频讲述神经网络的表示。

3.2 神经网络的表示(Neural Network Representation)

先回顾一下我在上一个视频画几张神经网络的图片,在这次课中我们将讨论这些图片的具体含义,也就是我们画的这些神经网络到底代表什么。

我们首先关注一个例子,本例中的神经网络只包含一个隐藏层(图 3.2.1)。这是一张神经网络的图片,让我们给此图的不同部分取一些名字。

在这里插入图片描述
我们有输入特征 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3,它们被竖直地堆叠起来,这叫做神经网络的输入层。它包含了神经网络的输入;然后这里有另外一层我们称之为隐藏层(图 3.2.1 的四个结点)。待会儿我会回过头来讲解术语"隐藏"的意义;在本例中最后一层只由一个结点构成,而这个只有一个结点的层被称为输出层,它负责产生预测值。解释隐藏层的含义:在一个神经网络中,当你使用监督学习训练它的时候,训练集包含了输入𝑥也包含了目标输出𝑦,所以术语隐藏层的含义是在训练集中,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在训练集中应具有的值。你能看见输入的值,你也能看见输出的值,但是隐藏层中的东西,在训练集中你是无法看到的。所以这也解释了词语隐藏层,只是表示你无法在训练集中看到他们。

现在我们再引入几个符号,就像我们之前用向量𝑥表示输入特征。这里有个可代替的记号 a [ 0 ] a^{[0]} a[0]可以用来表示输入特征。𝑎表示激活的意思,它意味着网络中不同层的值会传递到它们后面的层中,输入层将𝑥传递给隐藏层,所以我们将输入层的激活值称为 a [ 0 ] a^{[0]} a[0];下一层即隐藏层也同样会产生一些激活值,那么我将其记作 a [ 1 ] a^{[1]} a[1],所以具体地,这里的第一个单元或结点我们将其表示为 a 1 [ 1 ] a_1^{[1]} a1[1],第二个结点的值我们记为 a 2 [ 1 ] a_2^{[1]} a2[1]以此类推。所以这里的是一个四维的向量如果写成 Python 代码,那么它是一个规模为 4x1 的矩阵或一个大小为 4 的列向量,如下公式,它是四维的,因为在本例中,我们有四个结点或者单元,或者称为四个隐藏层单元; 公式 3.7:
a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] a^{[1]} =\begin{bmatrix} a_1^{[1]}\\a_2^{[1]}\\a_3^{[1]}\\a_4^{[1]} \end{bmatrix} a[1]= a1[1]a2[1]a3[1]a4[1]

最后输出层将产生某个数值𝑎,它只是一个单独的实数,所以的 y ^ \hat{y} y^值将取为 a [ 2 ] a^{[2]} a[2]。这与逻辑回归很相似,在逻辑回归中,我们有 y ^ \hat{y} y^直接等于𝑎,在逻辑回归中我们只有一个输出层,所以我们没有用带方括号的上标。但是在神经网络中,我们将使用这种带上标的形式来明确地指出这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络(图 3.2.2)。原因是当我们计算网络的层数时,输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。

在这里插入图片描述
最后,我们要看到的隐藏层以及最后的输出层是带有参数的,这里的隐藏层将拥有两个参数W和b,我将给它们加上上标 [ 1 ] ( W [ 1 ] , b [ 1 ] ) ^{[1]}(W^{[1]} ,b^{[1]}) [1](W[1],b[1]),表示这些参数是和第一层这个隐藏层有关系的。之后在这个例子中我们会看到𝑊是一个 4x3 的矩阵,而𝑏是一个 4x1 的向量,第一个数字 4 源自于我们有四个结点或隐藏层单元,然后数字 3 源自于这里有三个输入特征,我们之后会更加详细地讨论这些矩阵的维数,到那时你可能就更加清楚了。相似的输出层也有一些与之关联的参数 W [ 2 ] W^{[2]} W[2]以及b^{[2]}。从维数上来看,它们的规模分别是 1x4 以及 1x1。1x4 是因为隐藏层有四个隐藏层单元而输出层只有一个单元,之后我们会对这些矩阵和向量的维度做出更加深入的解释,所以现在你已经知道一个两层的神经网络什么样的了,即它是一个只有一个隐藏层的神经网络。

在下一个视频中。我们将更深入地了解这个神经网络是如何进行计算的,也就是这个神经网络是怎么输入x,然后又是怎么得到 y ^ \hat{y} y^

3.3 计算一个神经网络的输出(Computing a Neural Network’s output)

在上一节的视频中,我们介绍只有一个隐藏层的神经网络的结构与符号表示。在这节的视频中让我们了解神经网络的输出究竟是如何计算出来的。

首先,回顾下只有一个隐藏层的简单两层神经网络结构:

在这里插入图片描述
其中,𝑥表示输入特征,𝑎表示每个神经元的输出,𝑊表示特征的权重,上标表示神经网络的层数(隐藏层为 1),下标表示该层的第几个神经元。这是神经网络的符号惯例,下同。

神经网络的计算

关于神经网络是怎么计算的,从我们之前提及的逻辑回归开始,如下图所示。用圆圈表示神经网络的计算单元,逻辑回归的计算有两个步骤,首先你按步骤计算出𝑧,然后在第二步中你以 sigmoid 函数为激活函数计算𝑧(得出𝑎),一个神经网络只是这样子做了好多次重复计算。

在这里插入图片描述
回到两层的神经网络,我们从隐藏层的第一个神经元开始计算,如上图第一个最上面的箭头所指。从上图可以看出,输入与逻辑回归相似,这个神经元的计算与逻辑回归一样分为两步,小圆圈代表了计算的两个步骤。

第一步,计算 z 1 [ 1 ] , z 1 [ 1 ] = w 1 [ 1 ] T x + b 1 [ 1 ] z_1^{[1]}, z_1^{[1]} = w_1^{[1]T}x+ b_1^{[1]} z1[1],z1[1]=w1[1]Tx+b1[1]

第二步,通过激活函数计算 a 1 [ 1 ] , a 1 [ 1 ] = σ ( z 1 [ 1 ] ) a_1^{[1]}, a_1^{[1]} = σ(z_1^{[1]}) a1[1],a1[1]=σ(z1[1])

隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到 a 2 [ 1 ] 、 a 3 [ 1 ] 、 a 4 [ 1 ] a_2^{[1]}、a_3^{[1]}、a_4^{[1]} a2[1]a3[1]a4[1],详细结果见下:
z 1 [ 1 ] = w 1 [ 1 ] T x + b 1 [ 1 ] , a 1 [ 1 ] = σ ( z 1 [ 1 ] ) z_1^{[1]} = w_1^{[1]T}x+ b_1^{[1]},a_1^{[1]} = σ(z_1^{[1]}) z1[1]=w1[1]Tx+b1[1]a1[1]=σ(z1[1])
z 2 [ 1 ] = w 2 [ 1 ] T x + b 2 [ 1 ] , a 2 [ 1 ] = σ ( z 2 [ 1 ] ) z_2^{[1]} = w_2^{[1]T}x+ b_2^{[1]},a_2^{[1]} = σ(z_2^{[1]}) z2[1]=w2[1]Tx+b2[1]a2[1]=σ(z2[1])
z 3 [ 1 ] = w 3 [ 1 ] T x + b 3 [ 1 ] , a 3 [ 1 ] = σ ( z 3 [ 1 ] ) z_3^{[1]} = w_3^{[1]T}x+ b_3^{[1]},a_3^{[1]} = σ(z_3^{[1]}) z3[1]=w3[1]Tx+b3[1]a3[1]=σ(z3[1])
z 4 [ 1 ] = w 4 [ 1 ] T x + b 4 [ 1 ] , a 4 [ 1 ] = σ ( z 4 [ 1 ] ) z_4^{[1]} = w_4^{[1]T}x+ b_4^{[1]},a_4^{[1]} = σ(z_4^{[1]}) z4[1]=w4[1]Tx+b4[1]a4[1]=σ(z4[1])

向量化计算

如果你执行神经网络的程序,用 for 循环来做这些看起来真的很低效。所以接下来我们要做的就是把这四个等式向量化。向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中的𝑤纵向堆积起来变成一个(4,3)的矩阵,用符号𝑊[1]表示。另一个看待这个的方法是我们有四个逻辑回归单元,且每一个逻辑回归单元都有相对应的参数——向量𝑤,把这四个向量堆积在一起,你会得出这 4×3 的矩阵。因此,公式 3.8: z [ n ] = w [ n ] x + b [ n ] z^{[n]} =w^{[n]}x + b^{[n]} z[n]=w[n]x+b[n],公式 3.9: a [ n ] = σ ( z [ n ] ) a^{[n]} = σ(z^{[n])} a[n]=σ(z[n])
详细过程见下: 公式 3.10:
在这里插入图片描述
对于神经网络的第一层,给予一个输入𝑥,得到 a [ 1 ] a^{[1]} a[1],𝑥可以表示为 a [ 0 ] a^{[0]} a[0]。通过相似的衍生你会发现,后一层的表示同样可以写成类似的形式,得到 a [ 2 ] , y ^ = a [ 2 ] a^{[2]},\hat{y}= a^{[2]} a[2]y^=a[2],具体过程见公式 3.8、3.9。

在这里插入图片描述
如上图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就相当于一个逻辑回归的计算单元。当你有一个包含一层隐藏层的神经网络,你需要去实现以计算得到输出的是右边的四个等式,并且可以看成是一个向量化的计算过程,计算出隐藏层的四个逻辑回归单元和整个隐藏层的输出结果,如果编程实现需要的也只是这四行代码。

总结:通过本视频,你能够根据给出的一个单独的输入特征向量,运用四行代码计算出一个简单神经网络的输出。接下来你将了解的是如何一次能够计算出不止一个样本的神经网络输出,而是能一次性计算整个训练集的输出。

3.4 多样本向量化(Vectorizing across multiple examples)

在上一个视频,了解到如何针对于单一的训练样本,在神经网络上计算出预测值。

在这个视频,将会了解到如何向量化多个训练样本,并计算出结果。该过程与你在逻辑回归中所做类似。

逻辑回归是将各个训练样本组合成矩阵,对矩阵的各列进行计算。神经网络是通过对逻辑回归中的等式简单的变形,让神经网络计算出输出值。这种计算是所有的训练样本同时进行的,以下是实现它具体的步骤:
在这里插入图片描述

上一节视频中得到的四个等式。它们给出如何计算出 z [ 1 ] , a [ 1 ] , z [ 2 ] , a [ 2 ] z^{[1]},a^{[1]},z^{[2]},a^{[2]} z[1]a[1]z[2]a[2]

对于一个给定的输入特征向量𝑋,这四个等式可以计算出 a [ 2 ] a^{[2]} a[2]等于 y ^ \hat{y} y^。这是针对于单一的训练样本。如果有𝑚个训练样本,那么就需要重复这个过程。

用第一个训练样本 x [ 1 ] x^{[1]} x[1]来计算出预测值 y ^ [ 1 ] \hat{y}^{[1]} y^[1],就是第一个训练样本上得出的结果。然后,用 x [ 2 ] x^{[2]} x[2]来计算出预测值 y ^ [ 2 ] \hat{y}^{[2]} y^[2],循环往复,直至用 x [ m ] x^{[m]} x[m]计算出 y ^ [ m ] \hat{y}^{[m]} y^[m]。用激活函数表示法,如上图左下所示,它写成 a [ 2 ] ( 1 ) 、 a [ 2 ] ( 2 ) a^{[2](1)}、a^{[2](2)} a[2](1)a[2](2) a [ 2 ] ( m ) a^{[2](m)} a[2](m)。 【注】: a [ 2 ] ( i ) a^{[2](i)} a[2](i),(i)是指第i个训练样本而[2]是指第二层。

如果有一个非向量化形式的实现,而且要计算出它的预测值,对于所有训练样本,需要让i从 1 到m实现这四个等式:
z [ 1 ] ( i ) = w [ 1 ] ( i ) x ( i ) + b [ 1 ] ( i ) z^{[1](i)} =w^{[1](i)}x^{(i)} +b^{[1](i)} z[1](i)=w[1](i)x(i)+b[1](i)
a [ 1 ] ( i ) = σ ( z [ 1 ] ( i ) ) a^{[1](i)} = σ(z^{[1](i)} ) a[1](i)=σ(z[1](i))
z [ 2 ] ( i ) = w [ 2 ] ( i ) a [ 1 ] ( i ) + b [ 2 ] ( i ) z^{[2](i)} = w^{[2](i)}a^{[1](i)} +b^{[2](i)} z[2](i)=w[2](i)a[1](i)+b[2](i)
a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) a^{[2](i)} = σ(z^{[2](i)} ) a[2](i)=σ(z[2](i))

对于上面的这个方程中的 (𝑖),是所有依赖于训练样本的变量,即将(𝑖)添加到𝑥,𝑧和𝑎。如果想计算𝑚个训练样本上的所有输出,就应该向量化整个计算,以简化这列。

本课程需要使用很多线性代数的内容,重要的是能够正确地实现这一点,尤其是在深度学习的错误中。实际上本课程认真地选择了运算符号,这些符号只是针对于这个课程的,并且能使这些向量化容易一些。
所以,希望通过这个细节可以更快地正确实现这些算法。接下来讲讲如何向量化这些:
在这里插入图片描述
前一张幻灯片中的 for 循环是来遍历所有个训练样本。 定义矩阵𝑋等于训练样本,将它们组合成矩阵的各列,形成一个𝑛维或𝑛乘以𝑚维矩阵。接下来计算见公式 3.15:

以此类推,从小写的向量𝑥到这个大写的矩阵𝑋,只是通过组合𝑥向量在矩阵的各列中。同理, z [ 1 ] ( 1 ) , z [ 1 ] ( 2 ) z^{[1](1)},z^{[1](2)} z[1](1)z[1](2)等等都是 z [ 1 ] ( m ) z[1](m) z[1](m)的列向量,将所有𝑚都组合在各列中,就的到矩阵 Z [ 1 ] Z^{[1]} Z[1]。同理, a [ 1 ] ( 1 ) , z [ 1 ] ( 2 ) , … … , z [ 1 ] ( m ) a^{[1](1)},z^{[1](2)},……,z^{[1](m)} a[1](1)z[1](2)……z[1](m)将其组合在矩阵各列中,如同从向量x到矩阵X,以及从向量z到矩阵Z一样,就能得到矩阵 A [ 1 ] A^{[1]} A[1]。同样的,对于 Z [ 2 ] Z^{[2]} Z[2] A [ 2 ] A^{[2]} A[2],也是这样得到。

这种符号其中一个作用就是,可以通过训练样本来进行索引。这就是水平索引对应于不同的训练样本的原因,这些训练样本是从左到右扫描训练集而得到的。

在垂直方向,这个垂直索引对应于神经网络中的不同节点。例如,这个节点,该值位于矩阵的最左上角对应于激活单元,它是位于第一个训练样本上的第一个隐藏单元。它的下一个值对应于第二个隐藏单元的激活值。它是位于第一个训练样本上的,以及第一个训练示例中第三个隐藏单元,等等。

当垂直扫描,是索引到隐藏单位的数字。当水平扫描,将从第一个训练示例中从第一个隐藏的单元到第二个训练样本,第三个训练样本……直到节点对应于第一个隐藏单元的激活值,且这个隐藏单元是位于这𝑚个训练样本中的最终训练样本。

从水平上看,矩阵𝐴代表了各个训练样本。从竖直上看,矩阵𝐴的不同的索引对应于不同的隐藏单元。

对于矩阵𝑍,𝑋情况也类似,水平方向上,对应于不同的训练样本;竖直方向上,对应不同的输入特征,而这就是神经网络输入层中各个节点。

神经网络上通过在多样本情况下的向量化来使用这些等式。在下一个视频中,将证明为什么这是一种正确向量化的实现。这种证明将会与逻辑回归中的证明类似。

3.5 向 量 化 实 现 的 解 释 ( Justification for vectorized implementation)

在上一个视频中,我们学习到如何将多个训练样本横向堆叠成一个矩阵𝑋,然后就可以推导出神经网络中前向传播(forward propagation)部分的向量化实现。

在这个视频中,我们将会继续了解到,为什么上一节中写下的公式就是将多个样本向量化的正确实现。

我们先手动对几个样本计算一下前向传播,看看有什么规律:
在这里插入图片描述
这里,为了描述的简便,我们先忽略掉 b [ 1 ] b^{[1]} b[1]后面你将会看到利用 Python 的广播机制,可以很容易的将 b [ 1 ] b^{[1]} b[1] 加进来。

现在 W [ 1 ] W^[1] W[1] 是一个矩阵, x ( 1 ) , x ( 2 ) , x ( 3 ) x^{(1)}, x^{(2)}, x^{(3)} x(1),x(2),x(3)都是列向量,矩阵乘以列向量得到列向量,下面将它们用图形直观的表示出来: 公式 3.17:

在这里插入图片描述
视频中,吴恩达老师很细心的用不同的颜色表示不同的样本向量,及其对应的输出。所以从图中可以看出,当加入更多样本时,只需向矩阵𝑋中加入更多列。

所以从这里我们也可以了解到,为什么之前我们对单个样本的计算要写成 z [ 1 ] ( i ) = W [ 1 ] x ( i ) + b [ 1 ] z[1](i) =W[1]x(i) + b[1] z[1](i)=W[1]x(i)+b[1]这种形式,因为当有不同的训练样本时,将它们堆到矩阵X的各列中,那么它们的输出也就会相应的堆叠到矩阵 Z [ 1 ] Z^{[1]} Z[1] 的各列中。现在我们就可以直接计算矩阵 Z [ 1 ] Z^{[1]} Z[1]加上 b [ 1 ] b^{[1]} b[1],因为列向量 b [ 1 ] b^{[1]} b[1] 和矩阵 Z [ 1 ] Z^{[1]} Z[1]的列向量有着相同的尺寸,而 Python 的广播机制对于这种矩阵与向量直接相加的处理方式是,将向量与矩阵的每一列相加。 所以这一节只是说明了为什么公式 Z [ 1 ] = W [ 1 ] X + b [ 1 ] Z^{[1]} = W^{[1]}X + b^{[1]} Z[1]=W[1]X+b[1]是前向传播的第一步计算的正确向量化实现,但事实证明,类似的分析可以发现,前向传播的其它步也可以使用非常相似的逻辑,即如果将输入按列向量横向堆叠进矩阵,那么通过公式计算之后,也能得到成列堆叠的输出。

最后,对这一段视频的内容做一个总结:
由公式 3.12、公式 3.13、公式 3.14、公式 3.15 可以看出,使用向量化的方法,可以不需要显示循环,而直接通过矩阵运算从𝑋就可以计算出 A [ 1 ] A^{[1]} A[1],实际上𝑋可以记为 A [ 0 ] A^{[0]} A[0],使用同样的方法就可以由神经网络中的每一层的输入 A [ i − 1 ] A^{[i−1]} A[i1] 计算输出 A [ i ] A^{[i]} A[i]。其实这些方程有一定对称性,其中第一个方程也可以写成 Z [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ] Z^{[1]}= W^{[1]}A^{[0]} + b^{[1]} Z[1]=W[1]A[0]+b[1],你看这对方程,还有这对方程形式其实很类似,只不过这里所有指标加了 1。所以这样就显示出神经网络的不同层次,你知道大概每一步做的都是一样的,或者只不过同样的计算不断重复而已。这里我们有一个双层神经网络,我们在下周视频里会讲深得多的神经网络,你看到随着网络的深度变大,基本上也还是重复这两步运算,只不过是比这里你看到的重复次数更多。在下周的视频中将会讲解更深层次的神经网络,随着层数的加深,基本上也还是重复同样的运算。

以上就是对神经网络向量化实现的正确性的解释,到目前为止,我们仅使用 sigmoid 函数作为激活函数,事实上这并非最好的选择,在下一个视频中,将会继续深入的讲解如何使用更多不同种类的激活函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1027773.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8全网独家改进: 红外小目标 | 注意力改进 | 多膨胀通道精炼(MDCR)模块,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:多膨胀通道精炼(MDCR)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv8原创自研 https://blog…

Day24 代码随想录(1刷) 回溯

目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1…

Vue生命周期,从听说到深入理解(全面分析)

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶…

基于深度学习的OCR,如何解决图像像素差的问题?

基于深度学习的OCR技术在处理图像像素差的问题时确实面临一定的挑战。图像像素差可能导致OCR系统无法准确识别文本,从而影响其精度和可靠性。尽管已经有一些方法如SRN-Deblur、超分SR和GAN系列被尝试用于解决这个问题,但效果并不理想。然而,这…

论文阅读-Policy Optimization for Continuous Reinforcement Learning

摘要 我们研究了连续时间和空间环境下的强化学习( RL ),其目标是一个具有折扣的无限时域,其动力学由一个随机微分方程驱动。基于连续RL方法的最新进展,我们提出了占用时间(专门针对一个折现目标)的概念,并展示了如何有效地利用它…

【超图 SuperMap3D】【基础API使用示例】51、超图SuperMap3D - 绘制圆|椭圆形面标注并将视角定位过去

前言 引擎下载地址:[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 绘制圆形或者椭圆形效果 核心代码 entity viewer.entities.add({// 圆中心点position: { x: -1405746.5243351874, y: 4988274.8462937465, z: 370…

关于异业联盟模式做成小程序的可行性分析

随着移动互联网的快速发展,小程序作为一种轻量级应用,受到了越来越多企业和用户的青睐。而异业联盟模式则是一种有效的商业合作方式,能够实现资源共享、优势互补和共同发展。将异业联盟模式做成小程序,不仅可以提高用户体验&#…

Pytorch的hook函数

hook函数是勾子函数,用于在不改变原始模型结构的情况下,注入一些新的代码用于调试和检验模型,常见的用法有保留非叶子结点的梯度数据(Pytorch的非叶子节点的梯度数据在计算完毕之后就会被删除,访问的时候会显示为None&…

react-navigation:

我的仓库地址:https://gitee.com/ruanjianbianjing/bj-hybrid react-navigation: 学习文档:https://reactnavigation.org 安装核心包: npm install react-navigation/native 安装react-navigation/native本身依赖的相关包: react-nativ…

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测(完整源码和数据…

工业镜头常用参数之实效F(Fno.)和像圈

Fno. 工业镜头中常用到的参数F,有时候用F/#,Fno.来表示,指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示,也可通过镜头数值孔径(NA)和光学放大倍率(β)来计算。有效Fno.…

maven的依赖继承

先说一下创建子maven工程的步骤 继承 继承的作用:在父工程中,统一管理项目中的依赖信息,进行统一的版本控制 继承的背景是:对一个大型的项目进行了模块拆分,一个project下,创建了很多的module&#xff0c…

golang grpc和protobuf的版本降级问题(version4 -> version3)

最后更新于2024年3月28日 10:57:52 简中没查到类似的文章。一点小事闹麻了,搞了一天,特意发出来造福大家。 所谓的版本就是下面这个东西proto.ProtoPackageIsVersion4或者proto.ProtoPackageIsVersion3: 目的 为了适配旧代码&#xff0c…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点: 1.进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)…

百度智能小程序源码系统简洁版 SEO关键词排名推广优化 带完整的安装代码包以及搭建教程

移动互联网的快速发展,小程序以其轻量级、无需下载、即用即走的特点,迅速成为了各大平台争相推广的重要产品形态。百度智能小程序作为百度生态下的重要一环,凭借其强大的流量入口和丰富的功能组件,为开发者提供了广阔的创作空间。…

fastadmin学习05-开启debug以及配置

FastAdmin 框架提供了对 .env 环境变量配置的支持,并附带一个默认示例文件 .env.sample。在安装后,框架并不会自动启用 env 环境变量,需要手动将 .env.sample 复制为 .env 并进行配置。 如果不开启.env会读取database.php中的配置 下面测试…

基于单片机智能可控电源系统设计

**单片机设计介绍,基于单片机智能可控电源系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能可控电源系统设计的主要目标是实现电源的智能控制、监测和保护功能,以满足不同应用场景下…

计算机网络:物理层 - 信道极限容量

计算机网络:物理层 - 信道极限容量 实际信道中的数字信号奈式准则香农公式练习 实际信道中的数字信号 信号在传输过程中会受到各种因素的影响,如图所示: 这是一个数字信号,当它通过实际的信道后,波形会产生失真&#…

LLM2LLM: Boosting LLMs with Novel Iterative Data Enhancement

LLM2LLM: Boosting LLMs with Novel Iterative Data Enhancement 相关链接:arXiv GitHub 关键字:LLM、Data Augmentation、Fine-tuning、NLP、Low-data Regime 摘要 预训练的大型语言模型(LLMs)目前是解决绝大多数自然语言处理任…

如何选择最适合Shopee店铺的支付方式?

Shopee平台为卖家提供了多元化的收款选项,包括了在线支付、虚拟账户余额支付以及线下支付方式。卖家在选择收款方式时,必须充分考虑到市场适应性这一关键因素。因为不同地区和不同国家的消费者对于支付方式有着不同的偏好和习惯,因此&#xf…