深度学习中常用激活函数介绍

news2024/11/15 8:39:26

深度学习中常用激活函数介绍

在深度学习中,激活函数的作用主要是引入非线性特性,提高模型的表达能力。具体如下:
  1. 解决线性不可分问题:激活函数可以将输入特征的复杂度提升,使得神经网络能够处理非线性问题,从而增强网络的分类和回归能力。
  2. 决定神经元激活状态:激活函数决定了某个神经元是否被激活,即输出值是否有用。这有助于网络学习到更加复杂的数据模式。
  3. 反向传播算法的基础:激活函数是实现反向传播算法的基础,它允许误差从输出层向输入层传递,使得网络能够通过梯度下降等方法进行有效的权重更新。
  4. 增加模型的非线性:通过引入非线性激活函数,可以构建更深的网络结构,使模型能够捕捉到数据的深层次特征。
  5. 影响网络的训练和预测:不同的激活函数具有不同的性质,如饱和性、单调性等,这些性质会影响神经网络的收敛速度和泛化能力。
激活函数的选择:
  1. 理解任务需求
  • 对于分类问题,尤其是二分类问题,Sigmoid 函数是一个不错的选择,因为它可以将输出压缩到0和1之间,表示概率。
  • 对于多分类问题,Softmax 函数通常用于输出层,它可以将多个神经元的输出归一化为概率分布。
  1. 考虑网络架构
  • 对于深度神经网络,ReLU及其变体(如Leaky ReLU、Parametric ReLU)通常是首选,因为它们能够有效缓解梯度消失问题,加速网络训练。
  • 在循环神经网络(RNN)中,Tanh 或 LSTM单元可能更合适,因为它们能够更好地处理序列数据。
  1. 实验验证
  • 不同的激活函数在不同的数据集上表现各异。最佳实践是通过交叉验证来测试不同激活函数的表现,从而选择最适合你模型的那个。
  1. 注意激活函数的性质
  • 考虑到激活函数的饱和性,Sigmoid 和 Tanh 函数在输入值非常大或非常小的时候会饱和,这可能导致梯度消失问题。
  • ReLU函数在输入值为负时输出为零,这可能会导致某些神经元在训练过程中失活,即所谓的“死亡ReLU”现象。
常见激活函数如下:
1. Sigmoid

sigmoid函数将输入变换为(0,1)上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中的某个值:

优点:

  1. Sigmoid函数的输出范围是(0,1),这使得它可以用作输出层,为分类问题提供概率估计。
  2. Sigmoid函数容易求导,这使得在反向传播过程中可以轻松计算梯度。
  3. Sigmoid函数具有非线性特性,可以引入非线性因素,使神经网络能够更好地学习和表示复杂的模式。

缺点:

  1. Sigmoid函数存在饱和性问题,当输入的数值过大或过小,函数的梯度会变得非常小,这可能导致训练过程中的梯度消失问题。
  2. Sigmoid函数的输出不是以0为中心的,这可能会影响某些任务的数值稳定性,例如在二元分类问题中。
  3. Sigmoid函数对输入的数值范围非常敏感,如果输入的数值范围过大或过小,都可能影响模型的训练效果。

公式: S i g m o i d ( x ) = 1 1 + e − x Sigmoid(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+ex1

在这里插入图片描述

2. LogSigmoid

优点:

  1. 平滑性:与Sigmoid相似,LogSigmoid激活函数也是平滑的,这有助于减少模型训练时的梯度消失问题。
  2. 输出范围:LogSigmoid的输出范围是(0,1),这使得它非常适合用作神经网络的输出层,特别是在二分类问题中。
  3. 易求导:LogSigmoid函数的求导相对容易,这使得在模型训练过程中进行反向传播变得简单。

缺点:

  1. 不是以0为中心:与Sigmoid函数一样,LogSigmoid的输出不是以0为中心的,这可能导致一些数值稳定性问题。
  2. 饱和性问题:与Sigmoid函数一样,LogSigmoid也存在饱和性问题,即在某些输入下,函数的梯度变得非常小,这可能导致训练困难。

公式: L o g S i g m o i d ( x ) = l o g ( 1 1 + e − x ) LogSigmoid(x) = log(\frac{1}{1 + e^{-x}}) LogSigmoid(x)=log(1+ex1)

在这里插入图片描述

3. Tanh

tanh函数将输入变换为(0,1)上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中的某个值:

优点:

  1. 输出范围:Tanh的输出始终在-1到1之间,这使得它在某些应用中能够提供更好的数值稳定性。
  2. 计算效率:Tanh函数的计算相对简单,因此它在一些硬件上可能有更好的计算效率。
  3. 非线性:Tanh是一种非线性函数,能够增强神经网络的表达能力。

缺点:

  1. 不是以0为中心:Tanh的输出不是以0为中心,这可能导致一些数值稳定性问题。
  2. 梯度消失问题:与Sigmoid函数类似,Tanh也存在梯度消失问题。当梯度接近于0时,这会导致训练困难。
  3. 硬饱和问题:当输入值非常大或非常小的时候,Tanh可能会进入硬饱和区,导致梯度接近于0,从而影响模型的训练。

公式: T a n h ( x ) = 1 − e − 2 x 1 + e − 2 x Tanh(x) = \frac{1 - e^{-2x}}{1 + e^{-2x}} Tanh(x)=1+e2x1e2x

在这里插入图片描述

4. ReLu

全称是Rectified Linear Unit。它在输入小于0时输出0,输入大于0时输出等于输入值。

优点:

  1. 计算速度快:由于ReLU激活函数在实现上只需要进行简单的阈值操作,因此计算速度非常快,适合用于大规模的神经网络。
  2. 缓解过拟合:ReLU具有稀疏性,能够有效缓解过拟合问题,提高模型的泛化能力。
  3. 增加非线性:ReLU具有非线性特性,能够增加神经网络的非线性表达能力,使得模型能够更好地学习和表示复杂的输入数据。

缺点:

  1. 负值不激活:ReLU在输入小于0时输出为0,这可能导致神经元在某些情况下无法被激活,从而影响模型的表达能力。
  2. 不稳定梯度:在训练过程中,ReLU的梯度可能会变得非常大或非常小,导致梯度爆炸或梯度消失问题,影响模型的训练效果。
  3. 不适合用于深度网络:在深度网络中,ReLU激活函数可能会导致神经元“死亡”问题,即某些神经元永远不会被激活,从而导致模型无法正确学习和表达数据。

公式: R e L u ( x ) = { x x > 0 0 x <= 0 ReLu(x)= \begin{cases} x& \text{x > 0}\\ 0& \text{x <= 0} \end{cases} ReLu(x)={x0x > 0x <= 0

在这里插入图片描述

5. LeakyReLu

LeakyReLU是一种改进的激活函数,相对于标准的ReLU函数,它引入了一个小的负斜率,使得在输入小于0的情况下,输出不再为0,而是有一个小的非零值。

优点:

  1. 解决神经元死亡问题:由于LeakyReLU允许负数通过,因此可以避免神经元死亡的问题。这有助于提高模型的表达能力,并减少模型训练时的梯度消失问题。
  2. 加速收敛速度:LeakyReLU由于允许负数通过,在训练过程中能够更快地达到收敛状态。这可以缩短模型的训练时间,提高训练效率。
  3. 增加非线性:LeakyReLU具有非线性特性,能够增加神经网络的非线性表达能力,使得模型能够更好地学习和表示复杂的输入数据。

缺点:

  1. 超参数调整:LeakyReLU引入了一个超参数负斜率,需要人工调整。调整不当可能会影响模型的训练效果和收敛速度。
  2. 计算量增加:由于LeakyReLU允许负数通过,因此相对于标准的ReLU函数,其计算量会有所增加。这可能会增加模型的训练时间和内存消耗。
  3. 不稳定性:LeakyReLU的负斜率值需要谨慎选择,如果设置不当,可能会导致模型训练不稳定或者出现其他问题。

公式: L e a k y R e L u ( x ) = { x x > 0 α ∗ x x <= 0 LeakyReLu(x)= \begin{cases} x& \text{x > 0}\\ \alpha * x& \text{x <= 0} \end{cases} LeakyReLu(x)={xαxx > 0x <= 0

在这里插入图片描述

6. PReLu

也称为Parametric ReLU。与LeakyReLU类似,PReLU也允许负数通过,但nn.PReLU的负斜率是一个可学习的参数,可以随着训练过程进行更新。

优点:

  1. 解决神经元死亡问题:与LeakyReLU一样,PReLU允许负数通过,可以避免神经元死亡的问题,提高模型的表达能力。
  2. 增加非线性:PReLU具有非线性特性,能够增加神经网络的非线性表达能力,使得模型能够更好地学习和表示复杂的输入数据。
  3. 可学习的参数:PReLU的负斜率是一个可学习的参数,随着训练过程进行更新。这有助于提高模型的泛化能力和训练效果。

缺点:

  1. 计算量增加:由于PReLU需要额外的参数来存储负斜率,因此相对于标准的ReLU函数,其计算量会有所增加。这可能会增加模型的训练时间和内存消耗。
  2. 超参数调整:虽然PReLU的负斜率是一个可学习的参数,但仍需要人工设定一个初始值。初始值的选择可能会影响模型的训练效果和收敛速度。
  3. 不稳定性:与LeakyReLU一样,PReLU的负斜率值需要谨慎选择,如果设置不当,可能会导致模型训练不稳定或者出现其他问题。

公式: P R e L u ( x ) = { x x > 0 α i ∗ x x <= 0 PReLu(x)= \begin{cases} x& \text{x > 0}\\ \alpha_i * x& \text{x <= 0} \end{cases} PReLu(x)={xαixx > 0x <= 0

在这里插入图片描述

7. ELu

优点:

  1. 避免神经元死亡:与ReLU和LeakyReLU相比,ELU可以避免神经元死亡的问题。由于其负值区域的斜率为负,因此不会出现神经元完全不激活的情况。
  2. 更快收敛:ELU的梯度在输入为负值时相对较大,这有助于加快训练时的收敛速度。
  3. 实现非线性:ELU具有非线性特性,能够增加神经网络的非线性表达能力,使得模型能够更好地学习和表示复杂的输入数据。
  4. 避免梯度消失问题:ELU的输出梯度在输入为负值时较大,而在输入为正值时相对较小。这种特性有助于避免梯度消失问题,从而使得深层神经网络能够更好地训练和收敛。

缺点:

  1. 计算效率较低:由于ELU涉及到指数运算,相对于ReLU和LeakyReLU等线性运算,其计算效率较低。这可能会增加模型的训练时间和内存消耗。
  2. 参数设置问题:ELU涉及到两个可学习的参数,α和β。这两个参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎设置。
  3. 不稳定性:与ReLU和LeakyReLU相比,ELU的输出范围更大,因此其训练过程中可能会存在不稳定性问题。

公式: E L u ( x ) = { x x > 0 α i ∗ ( e x − 1 ) x <= 0 ELu(x) = \begin{cases} x& \text{x > 0}\\ \alpha_i * (e^x - 1)& \text{x <= 0} \end{cases} ELu(x)={xαi(ex1)x > 0x <= 0

在这里插入图片描述

8. SeLu

全称为Scaled Exponential Linear Unit,是一种神经网络激活函数。

优点:

  1. 自归一化:SELU具有自归一化的特性,这意味着在训练过程中,神经网络的输入和输出会逐渐被归一化,使得网络的参数更新更加稳定。
  2. 避免梯度消失和爆炸:SELU的梯度在输入较小时较大,在输入较大时较小,这有助于避免梯度消失和梯度爆炸问题,使得深层神经网络能够更好地训练和收敛。
  3. 高效计算:相对于其他激活函数,SELU的计算效率较高,因为其涉及到的是简单的数学运算,不需要指数或对数运算。

缺点:

  1. 应用范围有限:虽然SELU具有自归一化的特性,但其在某些问题上的表现并不一定优于其他激活函数,因此其应用范围相对有限。
  2. 需要调整参数:SELU涉及到两个可学习的参数λ和γ,这两个参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎设置。
  3. 缺乏理论支持:SELU虽然在实际应用中表现良好,但其理论基础相对较弱,仍需要进一步的研究和探索。

公式: S e L u ( x ) = λ { x x > 0 α e x − α x <= 0 SeLu(x) = \lambda\begin{cases} x& \text{x > 0}\\ \alpha e^x - \alpha& \text{x <= 0} \end{cases} SeLu(x)=λ{xαexαx > 0x <= 0

在这里插入图片描述

9. CeLu

优点:

  1. 避免梯度消失:CELU的梯度在输入较小时较大,有助于避免梯度消失问题,使得深层神经网络能够更好地训练和收敛。
  2. 连续可微:CELU是连续可微的,这意味着其可以在整个输入范围内进行微分,而不会出现梯度爆炸或梯度消失的问题。
  3. 计算效率高:CELU的计算过程相对简单,只需要进行指数运算和线性运算,因此其计算效率较高。

缺点:

  1. 参数设置问题:CELU涉及到两个可学习的参数β和α,这两个参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎设置。
  2. 无法解决梯度爆炸问题:虽然CELU可以避免梯度消失问题,但其无法解决梯度爆炸问题。在某些情况下,梯度可能会变得非常大,导致训练不稳定。
  3. 缺乏广泛应用:相对于其他激活函数,CELU的应用范围相对较窄,主要在一些特定的问题上使用。

公式: C e L u ( x ) = M a x ( 0 , x ) + M i n ( 0 , α ( e x α − 1 ) ) CeLu(x) = Max(0, x) + Min(0, \alpha(e^{\frac{x}{\alpha}} - 1)) CeLu(x)=Max(0,x)+Min(0,α(eαx1))

在这里插入图片描述

10. GeLu

优点:

  1. 避免梯度消失:GELU的梯度在输入较小时较大,有助于避免梯度消失问题,使得深层神经网络能够更好地训练和收敛。
  2. 平滑性:GELU是一种平滑的激活函数,其输出在整个输入范围内变化较为平缓,有助于减少模型训练时的震荡和梯度爆炸问题。
  3. 高效计算:相对于其他激活函数,GELU的计算过程相对简单,只需要进行指数运算和线性运算,因此其计算效率较高。

缺点:

  1. 参数设置问题:GELU涉及到两个可学习的参数β和α,这两个参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎设置。
  2. 无法解决梯度爆炸问题:虽然GELU可以避免梯度消失问题,但其无法解决梯度爆炸问题。在某些情况下,梯度可能会变得非常大,导致训练不稳定。
  3. 缺乏广泛应用:相对于其他激活函数,GELU的应用范围相对较窄,主要在一些特定的问题上使用。

在这里插入图片描述

11. ReLu6

ReLU6 就是普通的ReLU但是限制最大输出为6,这是为了在移动端设备float16/int8的低精度的时候也能有很好的数值分辨率。

优点:

  1. 避免梯度爆炸:由于ReLU6限制了激活值的范围,因此可以有效地避免梯度爆炸问题,使得模型训练更加稳定。
  2. 计算效率高:如上所述,ReLU6的计算过程相对简单,因此可以提高模型的训练速度。
  3. 在某些问题上表现出色:在一些特定的问题上,例如图像分类和目标检测等任务,ReLU6表现出了良好的性能。

缺点:

  1. 限制了激活值的范围:由于ReLU6将激活值限制在[0,6]的范围内,可能会导致模型表达能力受限,影响模型的泛化能力。
  2. 无法解决梯度消失问题:虽然ReLU6可以避免梯度爆炸问题,但其无法解决梯度消失问题。在某些情况下,梯度可能会变得非常小,导致训练缓慢或者不收敛。
  3. 缺乏理论支持:相对于其他激活函数,ReLU6的理论基础相对较弱,缺乏深入的理论分析和证明。

在这里插入图片描述

12. SiLu

相对于ReLU函数,SiLU函数在接近零时具有更平滑的曲线,并且由于其使用了sigmoid函数,可以使网络的输出范围在0和1之间。这使得SiLU在一些应用中比ReLU表现更好,例如在语音识别中使用SiLU比ReLU可以取得更好的效果。

优点:

  1. 非线性表达能力:SiLU作为一种非线性激活函数,能够引入非线性特性,增加模型的表达能力,有助于提高模型的分类和回归性能。
  2. 平滑性:由于SiLU具有平滑的特性,可以缓解梯度消失或梯度爆炸问题,使得模型训练更加稳定。
  3. 计算效率高:SiLU的计算过程相对简单,具有较低的复杂度,可以加快模型的训练速度。
  4. 广泛应用:SiLU在许多深度学习模型中得到了广泛应用,如在图像分类、目标检测、语音识别等领域取得了良好的效果。

缺点:

  1. 缺乏理论支持:相对于其他激活函数,SiLU的理论基础相对较弱,缺乏深入的理论分析和证明。
  2. 需要调整参数:SiLU涉及到可学习的参数β,该参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎调整。
  3. 对输入的敏感性:SiLU对输入的敏感性较高,当输入数据的分布发生较大变化时,可能会导致模型性能下降。

公式: S i L u ( x ) = x 1 + e − x SiLu(x) = \frac{x}{1 + e^{-x}} SiLu(x)=1+exx

在这里插入图片描述

13. HardSwish

HardSwish是一种非线性激活函数,能够引入非线性特性,增加模型的表达能力。具有平滑的特性,其函数形式相对较为平滑,有助于缓解梯度消失或梯度爆炸问题。HardSwish的计算过程相对简单,具有较低的复杂度,可以提高模型的训练速度。

优点:

  1. 非线性表达能力:HardSwish作为一种非线性激活函数,能够引入非线性特性,增加模型的表达能力,有助于提高模型的分类和回归性能。
  2. 平滑性:由于HardSwish具有平滑的特性,可以缓解梯度消失或梯度爆炸问题,使得模型训练更加稳定。
  3. 计算效率高:HardSwish的计算过程相对简单,具有较低的复杂度,可以加快模型的训练速度。
  4. 避免数值溢出:相对于SiLU,HardSwish具有更好的数值稳定性,可以避免在训练过程中出现数值溢出的问题。
  5. 在嵌入式设备上的优势:由于HardSwish具有较低的计算复杂度,因此在嵌入式设备上使用时具有更好的性能和较低的功耗。

缺点:

  1. 缺乏理论支持:相对于其他激活函数,HardSwish的理论基础相对较弱,缺乏深入的理论分析和证明。
  2. 需要调整参数:虽然HardSwish的计算过程相对简单,但仍然涉及到可学习的参数β,该参数的选择会对模型的训练效果和收敛速度产生影响,需要谨慎调整。
  3. 对输入的敏感性:HardSwish对输入的敏感性较高,当输入数据的分布发生较大变化时,可能会导致模型性能下降。

公式: H a r d S w i s h ( x ) = { 0 x <= -3 x x >= 3 x ∗ ( x + 3 ) 6 -3 <= x <= 3 HardSwish(x)= \begin{cases} 0& \text{x <= -3}\\ x& \text{x >= 3}\\ x * \frac{(x + 3)}{6}& \text{-3 <= x <= 3} \end{cases} HardSwish(x)= 0xx6(x+3)x <= -3x >= 3-3 <= x <= 3

在这里插入图片描述

14. SoftPlus

特点是函数图像以0为渐近线,并在大于0的部分类似于ReLU函数。计算过程相对简单,具有较低的复杂度,可以提高模型的训练速度。

优点:

  1. 平滑性:由于SoftPlus函数图像以0为渐近线,因此其导数在输入为0时为1,可以避免ReLU中存在的神经元“死亡”问题。
  2. 计算效率高:SoftPlus的计算过程相对简单,具有较低的复杂度,可以加快模型的训练速度。
  3. 应用广泛:SoftPlus在许多深度学习模型中得到了广泛应用,如在图像分类、目标检测、语音识别等领域取得了良好的效果。

缺点:

  1. 对输入的敏感性:SoftPlus对输入的敏感性较高,当输入数据的分布发生较大变化时,可能会导致模型性能下降。
  2. 缺乏理论支持:相对于其他激活函数,SoftPlus的理论基础相对较弱,缺乏深入的理论分析和证明。
  3. 存在偏移现象:由于SoftPlus的函数图像以0为渐近线,因此存在偏移现象,这可能会对模型的性能产生影响。

公式: S o f t P l u s ( x ) = l o g ( 1 + e x ) SoftPlus(x) = log(1 + e^x) SoftPlus(x)=log(1+ex)

在这里插入图片描述

15. Mish

Mish是一种自正则化的非单调神经激活函数,与传统的激活函数(如ReLU、Sigmoid等)不同,Mish是一种非单调函数。这种非单调性可以帮助模型更好地捕获数据的复杂模式。Mish的输出范围是无界的,这有助于避免梯度饱和问题,使模型在训练过程中具有更好的梯度传播性能。Mish在整个输入范围内都是平滑的,这有助于减少模型训练时的梯度噪声,使模型更加稳定。Mish具有一定的自正则化效果,这有助于减少模型过拟合的风险,提高模型的泛化能力。

优点:

  1. 表达能力:由于nn.Mish具有非单调性和无界性,它能够为模型提供更强大的表达能力,有助于模型学习更复杂的特征表示。
  2. 训练稳定性:nn.Mish的平滑性有助于减少训练过程中的梯度噪声,使模型训练更加稳定,降低梯度消失或梯度爆炸的风险。
  3. 泛化能力:nn.Mish的自正则化效果有助于减少模型过拟合,提高模型在未见数据上的泛化能力。

缺点:

  1. 计算成本:相较于一些简单的激活函数(如ReLU),nn.Mish的计算成本较高,因为它涉及到指数运算和乘法运算。这可能导致模型训练和推理速度相对较慢。
  2. 参数调整:虽然nn.Mish在许多情况下表现良好,但仍需要针对特定任务进行参数调整。这可能增加了模型优化的复杂性。
  3. 缺乏理论支持:尽管nn.Mish在实验中表现出色,但其理论基础相对较弱。目前尚缺乏深入的理论分析来证明其在各种场景下的优越性。

公式: M i s h ( x ) = x ∗ T a n h ( l o g ( 1 + e x ) ) Mish(x) = x * Tanh(log(1 + e^x)) Mish(x)=xTanh(log(1+ex))

在这里插入图片描述

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

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

相关文章

OpenAI推出ChatGPT已经过去一年多了,AI 取代了内容创作者吗

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Python基础】案例分析:GDP分析

GDP分析 文章目录 GDP分析1 分析过程与目标1.1 数据来源1.2 熟悉数据 2 各国与地区GDP数据分析关系多源组成2.2 清洗数据2.3 设定分析目标 3 主要国家DGP分析3.1 主要国家GDP趋势3.2 1990年开始GDP对比 4 中国GDP分析4.1 从1990年开始GDP变化化4.2 中国GDP分析增长超过10%的年份…

C# 使用 MailKit 发送邮件(附demo)

C# 使用 MailKit 发送邮件&#xff08;附demo&#xff09; 介绍安装包&#xff08;依赖&#xff09;案例简单代码属性介绍&#xff1a;MailboxAddress属性介绍&#xff1a;BodyBuilderSMTP 服务器端口SSL的案例&#xff1a;非SSL&#xff1a; 介绍一下SMTP 介绍 MailKit 是一…

【力扣】盛最多水的容器,双指针法

盛最多水的容器原题地址 方法一&#xff1a;双指针 如果使用暴力枚举&#xff0c;时间复杂度为 &#xff0c;效率太低&#xff0c;会超时。 考虑使用双指针&#xff0c;利用单调性求解。用 left 和 right 作为数组 height 的下标&#xff0c;分别初始化为 0 和 size-1 。考…

容器库(6)-std::set

std::set是以key为元素的关联容器&#xff0c;容器中的key是唯一的且按顺序排列的。搜索、移除和插入的时间复杂度是 。底层通常是以红黑树实现的。 template<class Key,class Compare std::less<Key>,class Allocator std::allocator<Key> > class set; …

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例&#xff08;802.1X认证&#xff09; 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络&#xff0c;使用802.1X客户端进行认证&#xff0c;输入正确的用户名和密…

背包问题(01背包、完全背包、多重背包)详解(超详细!!!),及题目代码和题意,包含6个例题。

第一题&#xff1a;01背包问题 01背包问题 时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 一个旅行者有一个最多能装 M 公斤的背包&#xff0c;现在有 n 件物品&#xff0c;它们的重量分别是 W1&#xff0c;W2&#xff0c;...,Wn ,它们的价值分别为 C1…

Netty的常用组件及线程模型设计(一)

Netty常用组件 Bootstrap Bootstrap是Netty框架的启动类和主入口类&#xff0c;发呢为客户端类Bootstrap和服务器类ServerBootstrap两种 Channel Channel是JavaNIO的一个基本构造&#xff0c;它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一…

电缆线的阻抗50Ω,真正含义是什么?

当我们提到电缆线的阻抗时&#xff0c;它到底是什么意思&#xff1f;RG58电缆通常指的是50Ω的电缆线。它的真正含义是什么&#xff1f;假如取一段3英尺(0.9144米)长的RG58电缆线&#xff0c;并且在前端测量信号路径与返回路径之间的阻抗。那么测得的阻抗是多少&#xff1f;当然…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 联合体的定义 联合体又叫共用体&#xff0c;它是一种特殊的数据类型&…

Flomesh 发布 Pipy 0.99.1

值此新春佳节来临之际 &#xff0c;我们很高兴地宣布 Pipy 0.99.1 版本 的发布&#xff0c;此次更新带来了多项重要特性和改进&#xff0c;进一步增强了 Pipy 的功能性和灵活性。 新特性与改进&#xff1a; 增加了对 BPF (Berkeley Packet Filter) 的支持&#xff0c;包括加载…

Webstorm安装了vue脚手架后终端输入vue报错解决方法

当我们初学Vue的时候&#xff0c;刚安装完Vue脚手架之后&#xff0c;输入vue报错&#xff0c;是因为webstorm终端受限制了。 vue: 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。 解决方案如下&#xff1a; 通过…

51单片机之数码管显示表白数字篇

朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L…

【Unity】重力场中的路径预测方法

前言 笔者前些天参加完了一场72小时的GameJam游戏开发比赛。这次比赛的主题是“探索”&#xff0c;笔者做了一个名为《探索者号》的探索宇宙的游戏&#xff08;游戏名一开始叫做《星际拾荒者》&#xff0c;但这不重要&#xff09;。 在开发过程中&#xff0c;笔者遇到了一些问…

2 月 7 日算法练习- 数据结构-并查集

并查集 并查集是一种图形数据结构&#xff0c;用于存储图中结点的连通关系。 每个结点有一个父亲&#xff0c;可以理解为“一只伸出去的手”&#xff0c;会指向另外一个点&#xff0c;初始时指向自己。 一个点的根节点是该点的父亲的父亲的的父亲&#xff0c;直到某个点的父亲…

探索NLP中的N-grams:理解,应用与优化

简介 n-gram[1] 是文本文档中 n 个连续项目的集合&#xff0c;其中可能包括单词、数字、符号和标点符号。 N-gram 模型在许多与单词序列相关的文本分析应用中非常有用&#xff0c;例如情感分析、文本分类和文本生成。 N-gram 建模是用于将文本从非结构化格式转换为结构化格式的…

Elasticsearch(四)

是这样的前面的几篇笔记&#xff0c;感觉对我没有形成知识体系&#xff0c;感觉乱糟糟的&#xff0c;只是大概的了解了一些基础知识&#xff0c;仅此而已&#xff0c;而且对于这技术栈的学习也是为了在后面的java开发使用&#xff0c;但是这里的API学的感觉有点乱&#xff01;然…

[VulnHub靶机渗透] dpwwn: 1

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

接口测试--参数实现MD5加密签名规则

最近有个测试接口需求&#xff0c;接口有签名检查&#xff0c;签名规范为将所有请求参数按照key字典排序并连接起来进行md5加密&#xff0c;格式是&#xff1a;md5(bar2&baz3&foo1),得到签名&#xff0c;将签名追加到参数末尾。由于需要对参数进行动态加密并且做压力测…

有道ai写作,突破免费限制,无限制使用

预览效果 文末提供源码包及apk下载地址有道ai写作python版 import hashlib import time import json import ssl import base64 import uuidfrom urllib.parse import quote import requests from requests_toolbelt.multipart.encoder import MultipartEncoder from Crypto.C…