深度学习常用的激活函数

news2024/11/24 9:11:29

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

神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习数据中的特征层次。
反向传播算法: 反向传播是一种优化算法,用于调整神经网络中连接权重,以使模型的预测结果更加准确。它通过计算损失函数对权重的梯度,并使用梯度信息来更新权重。
大规模数据和计算能力: 深度学习模型通常需要大量的数据来训练,以及强大的计算资源来进行复杂的计算。随着大数据和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函数存在的问题:

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

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

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

相关文章

FineBI 人力资源 专题

此处使用FineBI处理人力资源数据,数据来源于HR_database数据文件,将此文件拷贝到安装目录下 然后配置数据库连接 在【公共数据】中新建一个文件夹,并将之前数据库中需要用到的表放入此处,更新数据。显示如下。 这时候首先要建立…

汽配企业如何利用MES管理系统解决生产防错难题

汽车配件制造业是一个高效率、低成本、高质量的生产领域,但同时也面临着一系列的挑战。其中最为突出的挑战之一是如何在生产过程中避免错误,提高产品的合格率。本文将介绍汽车配件的制造特点以及如何通过MES管理系统解决方案实现生产防错,从而…

企业如何实现自己的AI垂直大模型

文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者:全栈弄潮儿 🏡 个人主页…

【C++11】右值引用 | 移动语义

文章目录 一.基本概念1.左值 && 右值2.左值引用 && 右值引用 二.右值引用使用场景和意义1.左值引用的使用场景2.左值引用的短板3.右值引用和移动语义4.右值引用引用左值5.右值引用的其他使用场景 三.完美转发1.万能引用2.完美转发保持值的属性3.完美转发的使用…

LeetCode 热题 100 JavaScript--141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

Linux知识点 -- 进程间通信(二)

Linux知识点 – 进程间通信(二) 文章目录 Linux知识点 -- 进程间通信(二)一、System V共享内存1.原理2.申请共享内存3.System V共享内存的使用4.为共享内存添加访问控制 二、信号量(概念理解)1.概念2.信号量…

GG修改美食大战老鼠宝石等级以及修改其他资料的方法

这期主要是讲一些,大家修改遇到的问题以及修改其他参数。 宝石、武器如何修改以及软件的安装与配置,请看我gg分栏的前两章 第一点:先讲一下自己武器上宝石等级的问题 宝石的代码: 0级升星宝石的代码1480e010 0级火力宝石的代码1…

概率论与数理统计:第一章:随机事件及其概率

文章目录 概率论Ch1. 随机事件及其概率1.基本概念(1)随机试验、随机事件、样本空间(2)事件的关系和运算①定义:互斥(互不相容)、对立②运算法则:德摩根率 (3)概率的定义(4)概率的性质(5)概率计算排列组合 2.等可能概型1.古典概型 (离散)2.几何概型 (连续…

Python-OpenCV 图像的基础操作

图像的基础操作 获取图像的像素值并修改获取图像的属性信息图像的ROI区域图像通道的拆分及合并图像扩边填充图像上的算术运算图像的加法图像的混合图像的位运算 获取图像的像素值并修改 首先读入一副图像: import numpy as np import cv2# 1.获取并修改像素值 # 读…

商用服务机器人公司【Richtech Robotics】申请纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国内华达州拉斯维加斯由华人领导的商用服务机器人公司【Richtech Robotics】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市&am…

springboot互联网智慧3D导诊系统源码 智慧医疗系统源码

互联网智慧3D导诊系统源码 通过智能导诊,进行自助问询及挂号服务,减轻导诊台护士压力,挂号更加方便快捷。 技术架构:springbootredismybatis plusmysqlRocketMQ 智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板…

《深度探索c++对象模型》第六章笔记

非原创,在学习 6 执行期语意学(Runtime Semantics) 有这样一个简单的案例: if (yy xx.getValue()) {// ... } 其中,xx和yy的定义为: X xx; Y yy; class Y定义为: class Y { public:Y();~Y();bool operator(con…

目前Java后端就业前景怎么样?

前言 并不乐观,看看现在的就业形式就知道了,基本上是僧多粥少的情况,你可能会看到很多编程语言排行榜或者流行榜中Java的排名很高,如同下面这种: 看排名确实可以粗略的得知语言当下的流行度、使用率,但是它…

对齐控制大作战:align-content 和 align-items,到底谁才是真正的垂直大将?

🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ Node专栏:Node.js从入门到精通 🖥️ TS知识总结:十万字TS知识点总结 👉 你的一键三连是我更新的最大动力❤️!…

算法通过村第二关-链表黄金笔记|K个一组反转

文章目录 前言链表反转|K个一组翻转链表解题方法:头插法处理:穿针引线法处理: 总结 前言 提示:没有人天生就喜欢一种气味而讨厌另一种气味。文明的暗示而已。 链表反转|K个一组翻转链表 给你链表的头节点 head ,每 k…

毕业后想往开发上位机的方向发展,不知道怎么样?

上位机的薪资目前还可以,虽然不能比肩互联网,但是在所有行业中应该还算比较高的,二十几万的年薪比较容易。 还不错,最流行的开发方式有labview和C#,建议选C#。工控主要还是集中在长三角和珠三角,搞上位机很…

CentOS 安装 Jenkins

本文目录 1. 安装 JDK2. 获取 Jenkins 安装包3. 将安装包上传到服务器4. 修改 Jenkins 配置5. 启动 Jenkins6. 打开浏览器访问7. 获取并输入 admin 账户密码8. 跳过插件安装9. 添加管理员账户 1. 安装 JDK Jenkins 需要依赖 JDK,所以先安装 JDK1.8。输入以下命令&a…

为什么亚马逊购物车会丢失呢?如何找回来呢?

想要找回店铺购物车,必须先清楚购物车丢失的原因,只有找到原因,对症下药,才能以最快的速度找回。 一、亚马逊购物车丢失的原因: 1.listing新上架 通常来说,新上架的Listing,该Listing在亚马逊…

HIVE优化之不需要参数优化

#1.数据倾斜 什么是数据倾斜? 一部分数据多 一部分数据少 造成的结果: MR运行过慢 主要是shuffle和reduce过程慢 分组聚合导致数据倾斜 Hive未优化的分组聚合 方法1:在MAP端直接聚合(分组聚合优化),减少…

wxwidgets Ribbon使用wxRibbonToolBar实例

wxRibbonToolBar就是工具栏,一下是实现的效果,界面只是功能展示,没有美化 实现代码如下所示: MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) …