深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。

神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习数据中的特征层次。
反向传播算法: 反向传播是一种优化算法,用于调整神经网络中连接权重,以使模型的预测结果更加准确。它通过计算损失函数对权重的梯度,并使用梯度信息来更新权重。
大规模数据和计算能力: 深度学习模型通常需要大量的数据来训练,以及强大的计算资源来进行复杂的计算。随着大数据和GPU等硬件的发展,深度学习在实际应用中取得了显著的进展。
预训练和迁移学习: 预训练模型可以在大规模数据上进行预训练,然后在特定任务上进行微调,从而加速模型训练和提高性能。这种迁移学习的方法在很多领域都取得了良好的效果。

激活函数是神经网络中的一个关键组件,它决定了神经元是否被激活(激活值大于某个阈值)并传递信息给下一层。激活函数引入非线性性质,使得神经网络能够表示更加复杂的函数关系。

1.Sigmoid函数(Logistic函数)

Sigmoid 函数将输入值压缩到 0 和 1 之间,曲线形状平滑,适合用于较浅的网络层或二元分类问题。然而,Sigmoid 函数在输入较大或较小的情况下容易出现梯度消失的问题,限制了其在深层网络中的应用。
在这里插入图片描述

Sigmoid函数的数学表达式为: f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1 其中 x x x 是输入值, e e e 是自然对数的底。这个函数将任意实数映射到一个范围在 0 到 1 之间的值,具有如下特点:

  1. x x x 趋近于正无穷大时, f ( x ) f(x) f(x) 趋近于 1;
  2. x x x 趋近于正无穷小时, f ( x ) f(x) f(x) 趋近于 0;
  3. x = 0 x=0 x=0 处, f ( x ) f(x) f(x) 的值为 0.5,即中间值。

Sigmoid函数也存在一些问题:

  1. 梯度消失: 在输入较大或较小的区域,Sigmoid函数的梯度接近于零,这会导致反向传播时梯度逐渐消失,影响深层网络的训练。
  2. 输出不是零中心: Sigmoid函数的输出在大部分情况下是正的,这可能导致在网络训练过程中的参数更新不均匀。
  3. 计算代价高: 计算Sigmoid函数的指数运算较为昂贵,可能影响网络的计算效率。

2.ReLU函数(Rectified Linear Unit)

ReLU函数在输入大于零时输出输入值本身,否则输出0。它简单且计算高效,在深度学习中广泛使用。但是,ReLU函数在负数区域输出为0,可能导致神经元“死亡”,即不再激活,从而影响网络的训练。
在这里插入图片描述

ReLU函数的数学表达式为: f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x)其中, x x x 是输入值, f ( x ) f(x) f(x) 是激活后的输出值。具有如下特点:

  1. x x x 大于等于 0 时, f ( x ) = x f(x) = x f(x)=x,即输出等于输入;
  2. x x x 小于 0 时, f ( x ) = 0 f(x)=0 f(x)=0,即输出为零。

ReLU函数的优势包括:

  1. 非线性: 尽管ReLU在负数区域输出为零,但在正数区域仍然是非线性的,能够引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。
  2. 计算高效: ReLU的计算非常简单,只需要比较输入值和零的大小,相对于其他一些激活函数,计算成本更低。
  3. 避免梯度消失: 在正数区域,ReLU函数的梯度为1,不会出现梯度消失问题,有助于在深层网络中传播梯度。

ReLU函数存在的一些问题:

  1. 死亡神经元问题: 当某个神经元在训练过程中始终输出为负数,其梯度为零,导致它的权重无法更新,即"死亡"。这种情况下,神经元将不再对网络的学习产生影响;
  2. 不是零中心: 当输入为负数时,ReLU的输出为零,这可能导致网络的激活分布不是零中心,可能对训练造成一些影响。

3.Leaky ReLU

Leaky ReLU是 ReLU 的变体,允许负数区域的斜率不为零,从而避免了死亡神经元问题。Leaky ReLU在负数区域保留一些激活,有助于减轻梯度消失问题。

Leaky ReLU函数的数学表达式为: f ( x ) = { x if  x ≥ 0 b x if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ bx &\text{if } x \leq 0 \end{cases} f(x)={xbxif x0if x0其中, x x x 是输入值,b 是一个小于 1 的超参数,通常在训练过程中固定为一个较小的正数,如0.01。具有如下特点:

  1. x x x 大于等于零时, f ( x ) = x f(x)=x f(x)=x,即输出等于输入,与普通的ReLU相同;
  2. x x x 小于零时, f ( x ) = a x f(x)=ax f(x)=ax,即引入一个小的斜率 b 来保证负数区域不完全为零。

Leaky ReLU的优势包括:

  1. 避免死亡神经元问题: 引入了一个小的斜率 aa,使得在负数区域仍然具有非零的输出,从而减轻了死亡神经元问题。
  2. 计算简单: Leaky ReLU的计算非常简单,与ReLU相似,只需要比较输入值和零的大小。

Leaky ReLU 存在的一些问题:

  1. 需要调参: 超参数 b 需要手动设定,虽然通常取较小的值(如0.01)能够在大多数情况下工作,但仍然需要调参。

  2. 不自适应: Leaky ReLU的斜率在负数区域是固定的,而PReLU则能够通过学习自适应地确定斜率

4.PReLU(Parametric ReLU)

PReLU是 Leaky ReLU 的一种扩展形式,它引入了一个可学习的参数,允许网络自动学习在负数区域的斜率,从而更好地适应不同的数据分布。

PReLU函数的数学表达式为: f ( x ) = { x if  x ≥ 0 a x if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ ax &\text{if } x \leq 0 \end{cases} f(x)={xaxif x0if x0其中, x x x 是输入值,a 是一个可学习的参数,通常在训练过程中通过反向传播进行更新。当 a 为 0 时,PReLU退化为普通的ReLU函数。当 a 大于 0 时,PReLU在负数区域引入了一个斜率,使得负数值也能够有非零的输出,从而避免死亡神经元问题。

PReLU函数的优势包括:

  1. 自适应斜率: PReLU通过学习参数 a 来自适应地确定负数区域的斜率,可以根据数据的分布和任务的需求来调整激活函数的形状。
  2. 减轻死亡神经元问题: 通过在负数区域引入斜率,PReLU有助于激活那些在训练过程中可能变得非激活的神经元,从而减轻了死亡神经元问题。
  3. 提高模型表达能力: PReLU的自适应斜率使得神经网络能够学习更加复杂的函数关系,提高了模型的表达能力。

PReLU函数存在的一些问题:

  • 需要更多的参数进行学习,可能会增加模型的复杂度和训练时间。

Leaky ReLU 和 PReLU 都在负数区域引入了斜率,从而在一定程度上改进了ReLU的问题。Leaky ReLU的斜率通常是固定的超参数,而PReLU则通过学习参数来自适应地确定斜率。选择使用哪种激活函数取决于具体问题的需求和实验结果。

5.Tanh函数(双曲正切函数)

Tanh 函数将输入值映射到 -1 和 1 之间,类似于Sigmoid函数,但范围更大。它在某些情况下能够更好地处理输入数据的对称性,但也会存在梯度消失问题。
在这里插入图片描述

Tanh函数的数学表达式为: f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x - e^{-x}}{e^{x}+e^{-x}} f(x)=ex+exexex其中, x x x 是输入值, e e e 是自然对数的底。Tanh函数将任意实数映射到范围在 -1 到 1 之间的值,具有如下特点:

  1. x x x 趋近于正无穷大时, f ( x ) f(x) f(x) 趋近于 1;
  2. x x x 趋近于正无穷小时, f ( x ) f(x) f(x) 趋近于 -1;
  3. x = 0 x=0 x=0 处, f ( x ) f(x) f(x) 的值为 0。

Tanh 函数的优势包括:

  1. 零中心性: Tanh函数的输出在大部分情况下是零中心的,相对于ReLU等激活函数,更有助于训练稳定性;
  2. 非线性: Tanh函数是非线性的,能够引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。

Tanh函数存在的一些问题:

  • 梯度消失: 在输入较大或较小的区域,Tanh函数的梯度接近于零,可能导致梯度消失问题,特别是在深层网络中。

6. Swish函数

Swish 函数是一种类似于 ReLU 的激活函数,它将输入值与 Sigmoid 函数的乘积作为输出。
Swish函数的数学表达式如下: f ( x ) = x ⋅ σ ( β x ) f(x)=x\cdot \sigma(\beta x) f(x)=xσ(βx)其中, x x x 是输入值, σ σ σ 是Sigmoid函数, β β β 是一个可调参数。Swish函数通过在输入值上引入Sigmoid函数,实现了在正数区域保留线性特性,同时在负数区域引入非线性的特性。

Swish函数的特点包括:

  1. 非线性性质: 在负数区域,Swish 函数的输出呈现非线性特性,有助于引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。
  2. 自动缩放: 当输入为较大的正数时,Swish 函数趋近于线性,不会出现梯度爆炸问题。这有助于模型的稳定性。
  3. 适用范围广: Swish 函数在一些任务中表现出色,尤其在较大的模型中(如深度神经网络)可能表现良好。

Swish函数存在的一些问题:

  1. 计算开销: Swish函数的计算相对于ReLU等简单激活函数更复杂,需要涉及Sigmoid函数的计算。
  2. 不适用于所有情况: 尽管在某些情况下表现出色,Swish函数并不一定在所有任务和网络结构中都能取得最佳性能。

7. ELU(Exponential Linear Unit)

ELU是一种具有平滑非线性特性的激活函数。在正数区域,ELU函数与ReLU相似;而在负数区域,它的曲线更平滑,有助于减轻梯度消失问题。此外,ELU在负数区域的输出不仅不是0,还具有一个负值,有助于缓解神经元死亡问题。
ELU的数学表达式为: f ( x ) = { x if  x ≥ 0 α ( exp ⁡ ( x ) − 1 ) if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ \alpha(\exp (x)-1) &\text{if } x \leq 0 \end{cases} f(x)={xα(exp(x)1)if x0if x0
其中, x x x 是输入值, α α α 是一个可调参数,通常取一个较大的正数,如1。ELU函数通过在负数区域引入指数函数,实现了在负数区域具有非线性的平滑特性。

ELU函数的优势有:

  1. 平滑非线性性质: 在负数区域,ELU函数的输出是平滑的非线性特性,相对于ReLU等函数,能够更好地拟合复杂的函数关系。
  2. 避免死亡神经元问题: ELU在负数区域不会输出零,因此能够避免死亡神经元问题。
  3. 零中心性: ELU函数在大部分情况下是零中心的,有助于训练稳定性。
  4. 自适应斜率: 通过调整参数 α α α 的值,可以自适应地调整负数区域的斜率,使得ELU能够适应不同的数据分布和任务需求。

ELU 存在的一些问题:

  • 计算开销: ELU函数的计算相对于ReLU等简单激活函数较为复杂,涉及指数函数的计算。
  • 参数调整: 参数 α α α 的选择可能需要进行调参,不同的数据和任务可能需要不同的参数值。

8.SELU(Scaled Exponential Linear Unit)

SELU是ELU的扩展,它在一定条件下能够使得网络在前向传播时自我规范化。这意味着在使用SELU激活函数时,网络的每一层的输出的均值和方差能够保持稳定。这一性质有助于训练更深的网络,而无需过多的批标准化等技巧。

SELU函数的数学表达式如下: f ( x ) = λ { x if  x ≥ 0 β ( exp ⁡ ( x ) − 1 ) if  x ≤ 0 f(x) =\lambda \begin{cases} x &\text{if } x \geq 0 \\ \beta (\exp (x)-1) &\text{if } x \leq 0 \end{cases} f(x)=λ{xβ(exp(x)1)if x0if x0其中, x x x 是输入值, β \beta β 是一个超参数(通常设置为1.6733), λ λ λ 是一个超参数(通常设置为1.0507)。SELU函数通过引入尺度参数 λ λ λ,使得输出值在正数区域逐渐缩放,从而实现网络自我规范化。

SELU函数的特点和优势包括:

  1. 自我规范化: 在一定条件下,使用SELU激活函数可以使得每一层的输出的均值和方差保持稳定,从而减轻梯度爆炸和梯度消失问题。
  2. 允许深层网络: 由于自我规范化的特性,SELU函数允许构建更深的神经网络,无需使用复杂的正则化技巧,如批标准化。
  3. 默认初始化: 在一些特定条件下,SELU激活函数使用零均值和单位方差的初始化可以保持自我规范化的特性。

SELU函数 存在的问题:

  • 不适用于所有情况: SELU函数在某些情况下表现出色,但并不一定在所有任务和网络结构中都能取得最佳性能。
  • 需要满足条件: 自我规范化的特性需要满足一定的条件,包括输入数据的分布和权重的初始化方式等。

9.Maxout

Maxout函数是一种通用的激活函数,它不是像ReLU或Sigmoid那样固定的形式,而是一种更为灵活的结构。Maxout函数的主要思想是让每个神经元学习多个线性函数的最大值,从而能够逼近更加复杂的非线性函数。Maxout可以视为ReLU和线性激活函数的泛化,它可以学习各种形状的非线性函数。然而,Maxout的参数量较大,可能需要更多的参数调整。

Maxout函数的数学表达式如下: f ( x ) = max ⁡ ( w 1 T x + b 1 , w 2 T x + b 2 ) f(x) = \max(w_1^Tx+b_1,w_2^Tx+b_2) f(x)=max(w1Tx+b1,w2Tx+b2)其中, x x x 是输入向量, w 1 , w 2 w_1,w_2 w1,w2​ 是权重向量, b 1 , b 2 b_1,b_2 b1,b2 是偏置。。Maxout函数中有两个分支,每个分支都由一个线性变换 w T x + b w^Tx+b wTx+b 组成,然后选择两者中的最大值作为输出。Maxout函数可以扩展到具有更多分支的情况。

Maxout函数的特点和优势包括:

  1. 灵活性: Maxout函数允许每个神经元学习多个线性函数的最大值,因此在逼近各种不同形状的非线性函数时具有灵活性。
  2. 适应性: 每个分支都可以学习数据的不同特征,从而在不同的输入区域自适应地选择最佳的线性函数。
  3. 抗过拟合: Maxout网络通常具有更多的参数,这有助于防止过拟合,尤其是在训练数据有限的情况下。

Maxout 存在的一些问题:

  • 参数量大: Maxout网络的参数量较大,可能需要更多的训练数据和计算资源来训练。
  • 计算成本: Maxout函数的计算成本较高,因为每个神经元有多个分支,每个分支都需要进行线性变换和比较操作。
  • 复杂性: Maxout网络的结构较为复杂,可能需要更多的调参和实验来找到最佳的网络结构。

10.Softmax函数

Softmax函数常用于多分类问题的输出层,将一组原始分数(也称为“logits”)转化为表示各类别概率的概率分布。Softmax函数能够将任意实数值映射到一个范围在0到1之间,并且保证所有类别的概率之和为1。

Softmax函数的数学表达式如下: softmax ( x i ) = e x i ∑ j = 1 N e x j \text{softmax}{(x_i)}=\frac{e^{x_{i}}}{\sum_{j=1}^{N}e^{x_j}} softmax(xi)=j=1Nexjexi其中, x i x_i xi 是原始分数中的第 i i i 个元素, N N N 是类别的数量, e e e 是自然对数的底。Softmax函数将每个原始分数进行指数化,并将指数化后的值除以所有指数化值的和,以获得每个类别的概率。

Softmax函数的特点和应用包括:

  1. 概率分布: Softmax函数的输出是一个概率分布,对于多类别分类问题,每个类别的输出表示为属于该类别的概率。
  2. 归一化: Softmax函数将原始分数进行指数化和归一化,使得网络的输出具有一定的可解释性和意义。
  3. 多类别分类: Softmax函数通常用于多类别分类问题,例如图像识别、文本分类等。

Softmax函数存在的一些问题:

  • 数值稳定性: 当原始分数较大时,指数运算可能导致数值溢出问题。为了提高数值稳定性,通常会在计算Softmax时减去分数中的最大值。
  • 互斥假设: Softmax函数假设每个样本只属于一个类别,不适用于多标签分类问题。
  • 类别数限制: Softmax函数在处理大量类别时可能会引入计算和存储的问题,特别是在输出层的类别数量较大时。

11.GELU

GELU 在正数区域类似于 ReLU,在负数区域则具有平滑的 S 形曲线。GELU 在一些任务上表现出色,并且相对简单,没有额外的超参数。结合了线性和非线性特性,同时在计算效率和性能之间取得了一定的平衡。GELU函数的设计旨在尝试克服ReLU等函数的一些问题,如梯度饱和和死亡神经元问题。

GELU函数的数学表达式如下: GELU ( x ) = 1 2 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \text{GELU}(x)=\frac{1}{2}x(1+\tanh (\sqrt{\frac{2}{\pi}}(x+0.044715x^{3}))) GELU(x)=21x(1+tanh(π2 (x+0.044715x3)))其中, x x x 是输入值, ⁡ t a n h ⁡tanh tanh 是双曲正切函数。GELU函数的形式结合了线性函数和双曲正切函数,使得在输入的正负两个区域都有非线性的输出。
在这里插入图片描述

GELU函数的特点和优势包括:

  1. 平滑非线性性质: GELU函数在整个输入范围内都有非线性的输出,相对于ReLU等函数,能够更好地拟合复杂的函数关系。
  2. 减轻梯度饱和问题: GELU函数在输入为正数区域具有线性的输出,能够减轻梯度饱和问题,有助于提高训练效率。
  3. 避免死亡神经元问题: GELU函数在负数区域也具有非零输出,能够避免死亡神经元问题。
  4. 计算效率: 相对于一些复杂的激活函数,GELU的计算相对较快,特别是与Sigmoid和双曲正切等函数相比。

GELU函数存在的问题:

  • 可能在某些情况下不如其他激活函数表现出色,具体效果可能会因问题的性质和数据分布而有所不同。

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

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

相关文章

手机上的照片怎么压缩?推荐这几种压缩方法

手机上的照片怎么压缩?如果你需要通过电子邮件或短信发送照片,则可能需要将其压缩为较小的文件大小以便于发送。另外,如果您你的手机存储空间有限,可以通过压缩照片来节省空间。下面就给大家介绍几种压缩手机照片的方法。 1、使用…

Leetcode-每日一题【剑指 Offer 21. 调整数组顺序使奇数位于偶数前面】

题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例: 输入:nums [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的…

07 Ubuntu中使用poetry工具管理python环境——巨详细!!!

由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda,着实是有些搞不明白这解释器之间的关系。 conda的卸载和ros2的安装暂不赘述,下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。 1 安装poetry 由于在有写入权限的限制&am…

【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:动静态库初识,库的含义,静态库的生成与链接,gcc/g默认链接方式&#xff0c…

配置两台数据库为主从数据库模式

一、主库配置 1、修改配置文件 /etc/my3306.cnf #mysql服务ID,保证整个集群环境中唯一,默认为1server-id1#是否只读,1代表只读,0代表读写read-only0#忽略的数据,指不需要同步的数据库#binlog-ignore-dbmysql#指定同步…

这应该是最全的,Fiddler手机App抓包详解,看完还不会来找我...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是抓包&#…

项目出bug,找不到bug,如何拉回之前的版本

1.用gitee如何拉取代码 本文为转载于「闪耀太阳a」的原创文章原文链接:https://blog.csdn.net/Gufang617/article/details/119929145 怎么从gitee上拉取代码 1.首先找到gitee上想要拉取得代码URL地址 点击复制这里的https地址 1 ps:(另外一种方法&…

Pytorch迁移学习使用MobileNet v3网络模型进行猫狗预测二分类

目录 1. MobileNet 1.1 MobileNet v1 1.1.1 深度可分离卷积 1.1.2 宽度和分辨率调整 1.2 MobileNet v2 1.2.1 倒残差模块 1.3 MobileNet v3 1.3.1 MobieNet V3 Block 1.3.2 MobileNet V3-Large网络结构 1.3.3 MobileNet V3预测猫狗二分类问题 送书活动 1. MobileNet …

【从零学习python 】03. Python交互式编程及注释详解

文章目录 了解pycharm交互式编程一、Python的交互式编程二、Pycharm里进入交互式编程三、IPython的安装和使用安装IPython使用IPython 四、交互式编程的优缺点注释注释的分类单行注释多行注释 进阶案例 了解pycharm 运行Pycharm,选择Create New Project,创建一个新的Python工程…

中文版开源Llama 2同时有了语言、多模态大模型,完全可商用

可以说,AI 初创公司 LinkSoul.Al 的这些开源项目让海外开源大模型在国内的普及和推广速度与国际几乎保持了一致。 7 月 19 日,Meta 终于发布了免费可商用版本 Llama 2,让开源大模型领域的格局发生了巨大变化。 Llama 2 模型系列包含 70 亿、…

小研究 - MySQL 分区分表的设计及实(一)

随着信息技术的快速发展,数据量越来越大,海量的表查询操作需要消耗大量的时间,成为影响数据库访问性能提高的主要因素。为了提升数据库操作的查询效率和用户体验,在关系型数据库管理系统(MySQL)中通过 range 分区和 Merge 存储&am…

sql 关联了2张表的 update 语句(转)

转自:SQL Update:使用一个表的数据更新另一张表 、update 关联两个表 基本上 select 能支持的关联和子查询操作,都能在 update 语句中使用。 在 where 条件中使用子查询 update a set a.age 1 where id in (select device_id from b) 在 wher…

【VUE】前端实现防篡改的水印

效果 水印的作用 图片加水印的操作一般是由后端来完成,有些站点保护的知识产权的类型可能比较多,不仅仅是图片,可能还有视频、文字等等,对于不同类型的对象添加水印后端操作比较复杂,所有有些站点逐步的让前端去进行水…

Java 集合框架

Java 集合框架提供了一组接口和类,以实现各种数据结构和算法。 集合框架满足以下几个要求。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合…

心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)

文章目录 前言介绍系统框架原项目地址本项目开发开源地址硬件PCB软件功能 详细内容硬件外壳制作WS2812级联及控制MAX30102血氧传感器0.96OLEDFreeRTOS 效果视频总结 前言 在好几年前,我好像就看到了焊武帝 jiripraus在纪念结婚五周年时,制作的一个心跳跟…

【面试题】 本地运行的前端代码,如何让他人访问?

前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 有时候,我前端写好了项目,想要给其他人看一下效果,可以选择将代码部署到test环境,也可以选择让外部通过i…

RabbitMQ的6种工作模式

RabbitMQ的6种工作模式 官方文档: http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式: 1、simple简单模式 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列,如果队列中…

rust-异步学习

rust获取future中的结果 两种主要的方法使用 async: async fn 和 async 块 async 体以及其他 future 类型是惰性的:除非它们运行起来,否则它们什么都不做。 运行 Future 最常见的方法是 .await 它。 当 .await 在 Future 上调用时,它会尝试把…

测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 测试新人在想什么…

GD32F103VET输出PWM波形

GD32F103VET将TIMER0_CH3映射到PE14引脚,使其输出PWM波形。测试时,使用示波器看PE14引脚输出的波形,效果更直观。 TIMER0之PWM输出引脚映射如下: TIMER0_REMAP[1:0]"00"(没有映射): TIMER0_CH0默认被映射到PA8引脚 TIMER0_CH1默认…