吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.4-3.5

目录

  • 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
    • 第三周: 超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)
      • 3.4 归一化网络的激活函数(Normalizing activations in a network)
      • 3.5 将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)

第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

第三周: 超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)

3.4 归一化网络的激活函数(Normalizing activations in a network)

在深度学习兴起后,最重要的一个思想是它的一种算法,叫做 Batch 归一化,由 Sergey loffe和Christian Szegedy 两位研究者创造。Batch归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会是你的训练更加容易,甚至是深层网络。让我们来看看 Batch 归一化是怎么起作用的吧。

在这里插入图片描述
当训练一个模型,比如 logistic 回归时,你也许会记得,归一化输入特征可以加快学习过程。你计算了平均值,从训练集中减去平均值,计算了方差,接着根据方差归一化你的数据集,在之前的视频中我们看到,这是如何把学习问题的轮廓,从很长的东西,变成更圆的东西,更易于算法优化。所以这是有效的,对 logistic 回归和神经网络的归一化输入特征值而言。

在这里插入图片描述
那么更深的模型呢?你不仅输入了特征值𝑥,而且这层有激活值 a [ 1 ] a^{[1]} a[1],这层有激活值 a [ 2 ] a^{[2]} a[2]等等。如果你想训练这些参数,比如 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3],那归一化 a [ 2 ] a^{[2]} a[2]的平均值和方差岂不是很好?以便使 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3]的训练更有效率。在 logistic 回归的例子中,我们看到了如何归一化 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3,会帮助你更有效的训练w和b。

所以问题来了,对任何一个隐藏层而言,我们能否归一化a值,在此例中,比如说 a [ 2 ] a^{[2]} a[2]的值,但可以是任何隐藏层的,以更快的速度训练 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3],因为 a [ 2 ] a^{[2]} a[2]是下一层的输入值,所以就会影响 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3]的训练。简单来说,这就是 Batch 归一化的作用。尽管严格来说,我们真正归一化的不是 a [ 2 ] a^{[2]} a[2],而是 z [ 2 ] z^{[2]} z[2],深度学习文献中有一些争论,关于在激活函数之前是否应该将值 z [ 2 ] z^{[2]} z[2]归一化,或是否应该在应用激活函数 a [ 2 ] a^{[2]} a[2]后再规范值。实践中,经常做的是归一化 z [ 2 ] z^{[2]} z[2],所以这就是我介绍的版本,我推荐其为默认选择,那下面就是 Batch 归一化的使用方法。

在神经网络中,已知一些中间值,假设你有一些隐藏单元值,从 z ( 1 ) z^{(1)} z(1) z ( m ) z^{(m)} z(m),这些来源于隐藏层,所以这样写会更准确,
z [ l ] ( i ) z^{[l](i)} z[l](i)为隐藏层,𝑖从 1 到𝑚,但这样书写,我要省略𝑙及方括号,以便简化这一行的符号。所以已知这些值,如下,你要计算平均值,强调一下,所有这些都是针对𝑙层,但我省略𝑙及方括号,然后用正如你常用的那个公式计算方差,接着,你会取每个𝑧(𝑖)值,使其规范化,方法如下,减去均值再除以标准偏差,为了使数值稳定,通常将 ϵ \epsilon ϵ作为分母,以防防𝜎 = 0的情况。

在这里插入图片描述

所以现在我们已把这些z值标准化,化为含平均值 0 和标准单位方差,所以𝑧的每一个分量都含有平均值 0 和方差 1,但我们不想让隐藏单元总是含有平均值 0 和方差 1,也许隐藏单元有了不同的分布会有意义,所以我们所要做的就是计算,我们称之为 z ^ ( i ) \hat{z}^{(i)} z^(i) z ^ ( i ) = γ z n o r m ( i ) + β \hat{z}^{(i)} = \gamma z_{norm}^{(i)} +\beta z^(i)=γznorm(i)+β,这里𝛾和𝛽是你模型的学习参数,所以我们使用梯度下降或一些其它类似梯度下降的算法,比如 Momentum 或者 Nesterov,Adam,你会更新𝛾和𝛽,正如更新神经网络的权重一样。

在这里插入图片描述
请注意𝛾和𝛽的作用是,你可以随意设置𝑧̃(𝑖)的平均值,事实上,如果 γ = σ 2 + ϵ \gamma = \sqrt{\sigma^2 + \epsilon} γ=σ2+ϵ ,如果𝛾等于这个分母项( z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z_{norm}^{(i)} =\frac{z^{(i)} -\mu}{\sqrt{\sigma^2 + \epsilon}} znorm(i)=σ2+ϵ z(i)μ中的分母), β \beta β等于 μ \mu μ,这里的这个值是 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z_{norm}^{(i)} =\frac{z^{(i)} -\mu}{\sqrt{\sigma^2 + \epsilon}} znorm(i)=σ2+ϵ z(i)μ中的 μ \mu μ,那么 γ z n o r m ( i ) + β \gamma z_{norm}^{(i)} + \beta γznorm(i)+β的作用在于,它会精确转化这个方程,如果这些成立( γ = σ 2 + ϵ \gamma = \sqrt{\sigma^2 + \epsilon} γ=σ2+ϵ , β = μ \beta =\mu β=μ),那么 z ^ ( i ) = z ( i ) \hat{z}^{(i)} = z^{(i)} z^(i)=z(i)

通过对𝛾和𝛽合理设定,规范化过程,即这四个等式,从根本来说,只是计算恒等函数,通过赋予𝛾和𝛽其它值,可以使你构造含其它平均值和方差的隐藏单元值。

在这里插入图片描述

所以,在网络匹配这个单元的方式,之前可能是用 z ( 1 ) z^{(1)} z(1) z ( 2 ) z^{(2)} z(2)等等,现在则会用 z ^ i \hat{z}^{i} z^i取代 z ( i ) z^{(i)} z(i),方便神经网络中的后续计算。如果你想放回[𝑙],以清楚的表明它位于哪层,你可以把它放这。

所以我希望你学到的是,归一化输入特征X是怎样有助于神经网络中的学习,Batch 归一化的作用是它适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。你应用 Batch 归一化了一些隐藏单元值中的平均值和方差,不过训练输入和这些隐藏单元值的一个区别是,你也许不想隐藏单元值必须是平均值 0 和方差 1。

在这里插入图片描述
比如,如果你有 sigmoid 激活函数,你不想让你的值总是全部集中在这里,你想使它们有更大的方差,或不是 0 的平均值,以便更好的利用非线性的 sigmoid 函数,而不是使所有的值都集中于这个线性版本中,这就是为什么有了𝛾和𝛽两个参数后,你可以确保所有的 z ( i ) z^{(i)} z(i)值可以是你想赋予的任意值,或者它的作用是保证隐藏的单元已使均值和方差标准化。那里,均值和方差由两参数控制,即𝛾和𝛽,学习算法可以设置为任何值,所以它真正的作用是,使隐藏单元值的均值和方差标准化,即 z ( i ) z^{(i)} z(i)有固定的均值和方差,均值和方差可以是 0 和 1,也可以是其它值,它是由𝛾和𝛽两参数控制的。

我希望你能学会怎样使用 Batch 归一化,至少就神经网络的单一层而言,在下一个视频中,我会教你如何将 Batch 归一化与神经网络甚至是深度神经网络相匹配。对于神经网络许多不同层而言,又该如何使它适用,之后,我会告诉你,Batch 归一化有助于训练神经网络的原因。所以如果觉得 Batch 归一化起作用的原因还显得有点神秘,那跟着我走,在接下来的两个视频中,我们会弄清楚。

3.5 将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)

你已经看到那些等式,它可以在单一隐藏层进行 Batch 归一化,接下来,让我们看看它是怎样在深度网络训练中拟合的吧。

在这里插入图片描述

假设你有一个这样的神经网络,我之前说过,你可以认为每个单元负责计算两件事。第一,它先计算z,然后应用其到激活函数中再计算a,所以我可以认为,每个圆圈代表着两步的计算过程。同样的,对于下一层而言,那就是 z 1 [ 2 ] z_1^{[2]} z1[2] z 2 [ 2 ] z_2^{[2]} z2[2]等。所以如果你没有应用 Batch 归一化,你会把输入𝑋拟合到第一隐藏层,然后首先计算 z [ 1 ] z^{[1]} z[1],这是由 w [ 1 ] w^{[1]} w[1] b [ 1 ] b^{[1]} b[1]两个参数控制的。接着,通常而言,你会把 z [ 1 ] z^{[1]} z[1]拟合到激活函数以计算 a [ 1 ] a^{[1]} a[1]。但 Batch 归一化的做法是将 z [ 1 ] z^{[1]} z[1]值进行 Batch 归一化,简称 BN,此过程将由 β [ 1 ] \beta^{[1]} β[1] γ [ 1 ] \gamma^{[1]} γ[1]两参数控制,这一操作会给你一个新的规范化的 z [ 1 ] z^{[1]} z[1]值( z ^ [ 1 ] \hat{z}^[1] z^[1]),然后将其输入激活函数中得到 a [ 1 ] a^{[1]} a[1],即 a [ 1 ] = g [ 1 ] ( z ^ [ l ] ) a^{[1]} = g^{[1]}(\hat{z}^{[l]}) a[1]=g[1](z^[l])

在这里插入图片描述
现在,你已在第一层进行了计算,此时 Batch 归一化发生在𝑧的计算和𝑎之间,接下来,你需要应用 a [ 1 ] a^{[1]} a[1]值来计算 z [ 2 ] z^{[2]} z[2],此过程是由 w [ 2 ] w^{[2]} w[2] b [ 2 ] b^{[2]} b[2]控制的。与你在第一层所做的类似,你会将 z [ 2 ] z^{[2]} z[2]进行 Batch 归一化,现在我们简称 BN,这是由下一层的 Batch 归一化参数所管制的,即 β [ 2 ] \beta^{[2]} β[2] γ [ 2 ] \gamma^{[2]} γ[2],现在你得到 z ^ [ 2 ] \hat{z}^{[2]} z^[2],再通过激活函数计算出 a [ 2 ] a^{[2]} a[2]等等。

所以需要强调的是 Batch 归一化是发生在计算𝑧和𝑎之间的。直觉就是,与其应用没有归一化的𝑧值,不如用归一过的 z ^ \hat{z} z^,这是第一层( z ^ [ 1 ] \hat{z}^{[1]} z^[1])。第二层同理,与其应用没有规范过的 z [ 2 ] z^{[2]} z[2]值,不如用经过方差和均值归一后的 z ^ [ 2 ] \hat{z}^{[2]} z^[2]。所以,你网络的参数就会是 w [ 1 ] w^{[1]} w[1] b [ 1 ] b^{[1]} b[1] w [ 2 ] w^{[2]} w[2] b [ 2 ] b^{[2]} b[2]等等,我们将要去掉这些参数。但现在,想象参数 w [ 1 ] w^{[1]} w[1] b [ 1 ] b^{[1]} b[1] w [ l ] w^{[l]} w[l] b [ l ] b^{[l]} b[l],我们将另一些参数加入到此新网络中 β [ 1 ] \beta^{[1]} β[1] β [ 2 ] \beta^{[2]} β[2] γ [ 1 ] \gamma^{[1]} γ[1] γ [ 2 ] \gamma^{[2]} γ[2]等等。对于应用 Batch 归一化的每一层而言。需要澄清的是,请注意,这里的这些 β \beta β β [ 1 ] \beta^{[1]} β[1] β [ 2 ] \beta^{[2]} β[2]等等)和超参数 β \beta β没有任何关系,下一张幻灯片中会解释原因,后者是用于 Momentum 或计算各个指数的加权平均值。Adam 论文的作者,在论文里用 β \beta β代表超参数。Batch 归一化论文的作者,则使用 β \beta β代表此参数( β [ 1 ] \beta^{[1]} β[1] β [ 2 ] \beta^{[2]} β[2]等等),但这是两个完全不同的 β \beta β。我在两种情况下都决定使用 β \beta β,以便你阅读那些原创的论文,但 Batch 归一化学习参数 β [ 1 ] \beta^{[1]} β[1] β [ 2 ] \beta^{[2]} β[2]等等和用于 Momentum、Adam、RMSprop 算法中的𝛽不同。

在这里插入图片描述
所以现在,这是你算法的新参数,接下来你可以使用想用的任何一种优化算法,比如使用梯度下降法来执行它。

举个例子,对于给定层,你会计算 d β [ l ] d\beta^{[l]} dβ[l],接着更新参数 β \beta β β [ l ] \beta^{[l]} β[l] = β [ l ] \beta^{[l]} β[l] α d β [ l ] \alpha d\beta^{[l]} αdβ[l]。你也可以使用 Adam 或 RMSprop 或 Momentum,以更新参数 β \beta β和𝛾,并不是只应用梯度下降法。

即使在之前的视频中,我已经解释过 Batch 归一化是怎么操作的,计算均值和方差,减去均值,再除以方差,如果它们使用的是深度学习编程框架,通常你不必自己把 Batch 归一化步骤应用于 Batch 归一化层。因此,探究框架,可写成一行代码,比如说,在 TensorFlow框架中,你可以用这个函数(tf.nn.batch_normalization)来实现 Batch 归一化,我们稍后讲解,但实践中,你不必自己操作所有这些具体的细节,但知道它是如何作用的,你可以更好的理解代码的作用。但在深度学习框架中,Batch 归一化的过程,经常是类似一行代码的东西。

所以,到目前为止,我们已经讲了 Batch 归一化,就像你在整个训练站点上训练一样,或就像你正在使用 Batch 梯度下降法。

在这里插入图片描述

实践中,Batch 归一化通常和训练集的 mini-batch 一起使用。你应用 Batch 归一化的方式就是,你用第一个 mini-batch(X^{{1}}),然后计算 z [ 1 ] z^{[1]} z[1],这和上张幻灯片上我们所做的一样,应用参数 w [ 1 ] w^{[1]} w[1] b [ 1 ] b^{[1]} b[1],使用这个 m i n i − b a t c h ( X 1 ) mini-batch(X^{{1}}) minibatch(X1)。接着,继续第二个 mini-batch(X^{{2}}),接着Batch 归一化会减去均值,除以标准差,由 β [ 1 ] \beta^{[1]} β[1] γ [ 1 ] \gamma^{[1]} γ[1]重新缩放,这样就得到了 z ^ [ 1 ] \hat{z}^{[1]} z^[1],而所有的这些都是在第一个 mini-batch 的基础上,你再应用激活函数得到 a [ 1 ] a^{[1]} a[1]。然后用 w [ 2 ] w^{[2]} w[2] b [ 2 ] b^{[2]} b[2]计算 z [ 2 ] z^{[2]} z[2],等等,所以你做的这一切都是为了在第一个 mini-batch( X 1 X^{{1}} X1)上进行一步梯度下降法。

在这里插入图片描述
类似的工作,你会在第二个 mini-batch(KaTeX parse error: Expected 'EOF', got '}' at position 7: X^[{2}}̲)上计算 z [ 1 ] z^{[1]} z[1],然后用 Batch 归一化来计算 z ^ [ 1 ] \hat{z}^{[1]} z^[1],所以 Batch 归一化的此步中,你用第二个 mini-batch(KaTeX parse error: Expected 'EOF', got '}' at position 7: X^[{2}}̲)中的数据使 z ^ [ 1 ] \hat{z}^{[1]} z^[1]归一化,这里的 Batch 归一化步骤也是如此,让我们来看看在第二个 mini-batch( X 2 X^{{2}} X2)中的例子,在mini-batch 上计算 z [ 1 ] z^{[1]} z[1]的均值和方差,重新缩放的 β \beta β γ \gamma γ得到 z [ 1 ] z^{[1]} z[1],等等。

然后在第三个 mini-batch( X 3 X^{{3}} X3)上同样这样做,继续训练。

现在,我想澄清此参数的一个细节。先前我说过每层的参数是 w [ l ] w^{[l]} w[l] b [ l ] b^{[l]} b[l],还有 β [ l ] \beta^{[l]} β[l] γ [ l ] \gamma^{[l]} γ[l],请注意计算𝑧的方式如下, z [ l ] z^{[l]} z[l] = w [ l ] a [ l − 1 ] + b [ l ] w^{[l]}a^{[l−1]} + b^{[l]} w[l]a[l1]+b[l],但 Batch 归一化做的是,它要看这个 mini-batch,先将 z [ l ] z^{[l]} z[l]归一化,结果为均值 0 和标准方差,再由 β \beta β γ \gamma γ重缩放,但这意味着,无论 b [ l ] b^{[l]} b[l]的值是多少,都是要被减去的,因为在 Batch 归一化的过程中,你要计算 z [ l ] z^{[l]} z[l]的均值,再减去平均值,在此例中的 mini-batch 中增加任何常数,数值都不会改变,因为加上的任何常数都将会被均值减去所抵消。

在这里插入图片描述

所以,如果你在使用 Batch 归一化,其实你可以消除这个参数( b [ l ] b^{[l]} b[l]),或者你也可以,暂时把它设置为 0,那么,参数变成 z [ l ] z^{[l]} z[l] = w [ l ] a [ l − 1 ] w^{[l]}a^{[l−1]} w[l]a[l1],然后你计算归一化的 z [ l ] z^{[l]} z[l] z ^ [ l ] \hat{z}^{[l]} z^[l] = γ [ l ] \gamma^{[l]} γ[l] z [ l ] z^{[l]} z[l]+ β [ l ] \beta^{[l]} β[l],你最后会用参数 β [ l ] \beta^{[l]} β[l],以便决定 z ^ [ l ] \hat{z}^{[l]} z^[l]的取值,这就是原因。

在这里插入图片描述
所以总结一下,因为 Batch 归一化超过了此层 z [ l ] z^{[l]} z[l]的均值,𝑏[𝑙]这个参数没有意义,所以,你必须去掉它,由 β [ l ] \beta^{[l]} β[l]代替,这是个控制参数,会影响转移或偏置条件。

最后,请记住 z [ l ] z^{[l]} z[l]的维数,因为在这个例子中,维数会是( n [ l ] n^{[l]} n[l], 1), β [ l ] \beta^{[l]} β[l]的尺寸为( n [ l ] n^{[l]} n[l], 1),如果是 l 层隐藏单元的数量,那 β [ l ] \beta^{[l]} β[l] γ [ l ] \gamma^{[l]} γ[l]的维度也是( n [ l ] n^{[l]} n[l], 1),因为这是你隐藏层的数量,你有 n [ l ] n^{[l]} n[l]隐藏单元,所以 β [ l ] \beta^{[l]} β[l] γ [ l ] \gamma^{[l]} γ[l]用来将每个隐藏层的均值和方差缩放为网络想要的值。

在这里插入图片描述
让我们总结一下关于如何用 Batch 归一化来应用梯度下降法,假设你在使用 mini-batch梯度下降法,你运行𝑡 = 1到 batch 数量的 for 循环,你会在 mini-batch X t X^{{t}} Xt上应用正向 prop,每个隐藏层都应用正向 prop,用 Batch 归一化代替 z [ l ] z^{[l]} z[l] z ^ [ l ] \hat{z}^{[l]} z^[l]。接下来,它确保在这个 mini-batch 中,𝑧值有归一化的均值和方差,归一化均值和方差后是 z ^ [ l ] \hat{z}^{[l]} z^[l],然后,你用反向 prop 计算 d w [ l ] dw^{[l]} dw[l] d b [ l ] db^{[l]} db[l],及所有 l 层所有的参数, d β [ l ] d\beta^{[l]} dβ[l] d γ [ l ] d\gamma^{[l]} dγ[l]。尽管严格来说,因为你要去掉𝑏,这部分其实已经去掉了。最后,你更新这些参数: w [ l ] w^{[l]} w[l]= w [ l ] − α d w [ l ] w^{[l]} − \alpha dw^{[l]} w[l]αdw[l],和以前一样, β [ l ] \beta^{[l]} β[l]= β [ l ] − α d β [ l ] \beta^{[l]} −\alpha d\beta^{[l]} β[l]αdβ[l],对于𝛾也是如此 γ [ l ] \gamma^{[l]} γ[l]= γ [ l ] − α d γ [ l ] \gamma^{[l]} − \alpha d\gamma^{[l]} γ[l]αdγ[l]

如果你已将梯度计算如下,你就可以使用梯度下降法了,这就是我写到这里的,但也适用于有 Momentum、RMSprop、Adam 的梯度下降法。与其使用梯度下降法更新 mini-batch,你可以使用这些其它算法来更新,我们在之前几个星期中的视频中讨论过的,也可以应用其它的一些优化算法来更新由 Batch 归一化添加到算法中的 β \beta β γ \gamma γ参数。

在这里插入图片描述
我希望,你能学会如何从头开始应用 Batch 归一化,如果你想的话。如果你使用深度学习编程框架之一,我们之后会谈。希望,你可以直接调用别人的编程框架,这会使 Batch归一化的使用变得很容易。

现在,以防 Batch 归一化仍然看起来有些神秘,尤其是你还不清楚为什么其能如此显著的加速训练,我们进入下一个视频,详细讨论 Batch 归一化为何效果如此显著,它到底在做什么。

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

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

相关文章

Spark SQL【Java API】

前言 之前对 Spark SQL 的影响一直停留在 DSL 语法上面,感觉可以用 SQL 表达的,没有必要用 Java/Scala 去写,但是面试一段时间后,发现不少公司还是在用 SparkSQL 的,京东也在使用 Spark On Hive 而不是我以为的 Hive O…

ubuntu20.04 开机自动挂载外加硬盘

文章目录 一、问题描述二、操作1. 查找新添盘符2. 格式化硬盘文件系统3. 挂载硬盘4. 开机自动挂载5. 取消挂载6. 查看挂载的硬盘信息 一、问题描述 因电脑使用一段时间后自身硬盘不足,需外加硬盘使得电脑自动识别加载。 二、操作 1. 查找新添盘符 sudo blkid自己…

免费、开源、好用的 SQL 客户端合集

免费、开源、好用的 SQL 客户端合集 分类 编程技术 0、SQL Chat SQL Chat 是 2023 年 3 月推出的新型 SQL 客户端,它将数据库管理带入了基于聊天的新时代。 SQL Chat 由 ChatGPT 驱动,能够帮你编写和润色 SQL 语句,让数据库操作变得更加智…

微信小程序开发环境的搭建

一、注册微信小程序账号 二、安装微信开发者工具 1.下载微信开发者工具。 官网下载地址:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/downloads.html 2、选择稳定版Window64下载安装 3、下载完毕后,点击下一步安装 三、使用微信开发者工具…

深入理解python列表遍历:两种方法详解与实例

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、使用索引遍历列表 三、直接使用元素遍历列表 四、总结 一、引言 在编程过程…

创建python字典的两种方法:直观与函数式

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、直观创建法:直接定义键值对 二、函数式创建法:使用内置函数dict…

CSRF 攻击

概述 CSRF(Cross-site request forgery,跨站请求伪造)。 它是指攻击者利用了用户的身份信息,执行了用户非本意的操作。 它首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的c…

拼多多携手中国农业大学,投建陕西佛坪山茱萸科技小院

5月16日下午,中国农业大学陕西佛坪山茱萸科技小院在佛坪县银厂沟村揭牌。佛坪县素有“中国山茱萸之乡”的美誉,是全国山茱萸三大基地之一,当地山茱萸是国家地理标志产品,山茱萸肉产量位居全国第二。 为充分发挥佛坪县得天独厚的山…

局部放电试验变频电源

局部放电试验中的变频电源设备 局部放电试验变频电源是一种专为电力设备的局部放电检测设计的高性能电源系统。在电力设备的运行和维护过程中,局部放电测试用于探测潜在的绝缘缺陷,防止它们进一步恶化导致设备损坏。传统的局部放电试验通常使用交流电源&…

jmeter之测试计划

一、测试计划作用 测试计划是jmeter的默认控件所有线程组都是测试计划的下级控件测试计划可以配置用户自定义的变量测试计划可以配置线程组的串行或并行 二、查看界面 名称:可以修改自定义的名称注释:解释测试计划是用来做什么的用户自定义的变量&…

Sentinel重要的前置知识

文章目录 1、雪崩问题及解决方案1.1、雪崩问题1.2、超时处理1.3、仓壁模式1.4、断路器1.5、限流1.6、总结 2、服务保护技术对比3、Sentinel介绍和安装3.1、初识Sentinel3.2、安装Sentinel 4、微服务整合Sentinel ​🍃作者介绍:双非本科大三网络工程专业在…

PX4使用yolo仿真环境搭建

文章目录 前言一、修改机架sdf文件二、安装yolo三、运行 前言 ubuntu20.04 PX4 1.13.3 已配置好PX4 ROS gazebo环境 一、修改机架sdf文件 将双目相机加到仿真的iris机架上 修改下图文件 添加如下&#xff1a; <include><uri>model://stereo_camera</uri>…

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码 FunCaptcha 以其复杂的图像验证而闻名&#xff0c;对自动化系统构成了巨大的挑战。CapSolver 的 API 服务利用先进的 AI 技术轻松应对和解决 FunCaptcha 挑战。本指南探讨了 CapSolver 如何实现无缝自动化&#xff…

STM32笔记-AD模数转换

目录 一、ADC介绍 二、ADC主要特征 三、ADC框图 1. ​​​​ 外部触发转换 ​ 2. 转换模式 3. 输入通道 4. 逻辑框图 四、校准 五、数据对齐 六、AD转换步骤 七、AD_Init(单通道AD转换)初始化函数配置 DMA: adc_dma_mode_enable(ADC0); 这段代码是用来使能ADC的DMA&a…

ts 字符串不能做索引异常提示 type because expression of type ‘string‘

Element implicitly has an any type because expression of type string cant be used to index type 例子 let a{b:"1",c:"1" } var b"b"; let ca[b] let ca[b]就会爆这个错误&#xff0c;因为在编译器看来b是一个未知的东西&#xff0c;它不…

什么是创造力?如何判断自己的创造力?

创造力&#xff0c;主要表现为创新思想、发现和创造新事物的能力&#xff0c;是知识&#xff0c;智力和能力的综合能力&#xff0c;尤其是在职业发展方面&#xff0c;创造力具有重要的意义&#xff0c;企业的核心竞争力就来源于创造力&#xff0c;这就需要具有创造力的员工来推…

【QGIS入门实战精品教程】13.1:导入带地理标签的航测照片

文章目录 一、数据准备二、导入带地理标签的航测照片三、导出点位shp四、生成航线一、数据准备 本实验数据位于13.1:导入带地理标签的航测照片.rar中,如下: 查看照片及相机参数信息,航测照片都带有相机参数、部分POS及地理坐标信息,如下所示: 二、导入带地理标签的航测照…

YoloV8改进策略:蒸馏改进|CWDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要 在本文中&#xff0c;我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了CWDLoss作为蒸馏方法的核心&#xff0c;通过对比在线和离线两种蒸馏方式&#xff0c;我们发现离线蒸馏在效果上更为出色。因此&#xff0c;为了方便广大读者和研究者应用&#xff…

大语言模型PEFT

目录 一、PEFT的关键概念和方法 部分参数微调 概念 方法 优势 适配器&#xff08;Adapters&#xff09; 方法 优势 低秩分解&#xff08;Low-rank Factorization&#xff09; 方法 优势 差分微调&#xff08;Delta Tuning&#xff09; 方法 优势 多任务学习&…

政策及需求多因素驱动下 中国适老化改造市场空间大

政策及需求多因素驱动下 中国适老化改造市场空间大 适老化改造是为了提高老年人居住环境的舒适度和安全性&#xff0c;满足老年人居住需求进行的建筑改造&#xff0c;根据住房和城乡建设部城市建设司发布的《城市居家适老化改造指导手册》可以将适老化改造分为基础性改造和提升…