Keras 3 API文档 / 层 API / 层激活函数

层激活函数

激活函数的用法

激活函数既可以通过 Activation 层来使用,也可以通过所有前向层都支持的 activation 参数来使用。

model.add(layers.Dense(64, activation=activations.relu))

这等同于

from keras import layers
from keras import activations

model.add(layers.Dense(64))
model.add(layers.Activation(activations.relu))

所有内置的激活函数也可以通过它们的字符串标识符传递。

model.add(layers.Dense(64, activation='relu'))

可用激活函数

[源代码]

celu 函数

keras.activations.celu(x, alpha=1.0)

连续可微指数线性单元。

CeLU 激活函数定义为:

celu(x) = alpha * (exp(x / alpha) - 1) for x < 0, celu(x) = x for x >= 0

其中 alpha 是一个用于控制激活函数形状的缩放参数。

参数

  • x:输入张量。
  • alpha:CeLU 公式中的 α 值。默认为 1.0

参考


[源代码]

elu 函数

keras.activations.elu(x, alpha=1.0)

指数线性单元。

指数线性单元(ELU)在 alpha > 0 时定义为:

  • x 如果 x > 0
  • alpha * exp(x) - 1 如果 x < 0

ELU 具有负值,这使得激活值的均值更接近于零。

均值激活值更接近于零可以实现更快的学习,因为它们使梯度更接近自然梯度。ELU 在参数变小时会饱和到一个负值。饱和意味着导数很小,这会减少传播到下一层的变异和信息。

参数

  • x:输入张量。
  • alpha:一个标量,正段的斜率。默认为 1.0

参考


[源代码]

exponential 函数

keras.activations.exponential(x)

指数激活函数。

参数

  • x:输入张量。

[源代码]

gelu 函数

keras.activations.gelu(x, approximate=False)

高斯误差线性单元(GELU)激活函数。

高斯误差线性单元(GELU)定义为:

gelu(x) = x * P(X <= x) 其中 P(X) ~ N(0, 1),即 gelu(x) = 0.5 * x * (1 + erf(x / sqrt(2)))

GELU 根据输入值来加权输入,而不是像 ReLU 那样根据符号来门控输入。

参数

  • x:输入张量。
  • approximate:一个 bool 值,指示是否启用近似。

参考


[源代码]

glu 函数

keras.activations.glu(x, axis=-1)

门控线性单元(GLU)激活函数。

GLU 激活函数定义为:

glu(x) = a * sigmoid(b),

其中 x 沿着给定的轴被分割成两个相等的部分 ab

参数

  • x:输入张量。
  • axis:输入张量被分割的轴。默认为 -1

参考


[源代码]

hard_shrink 函数

keras.activations.hard_shrink(x, threshold=0.5)

硬收缩激活函数。

它定义为:

hard_shrink(x) = x 如果 |x| > thresholdhard_shrink(x) = 0 否则。

参数

  • x:输入张量。
  • threshold:阈值。默认为 0.5。

[源代码]

hard_sigmoid 函数

keras.activations.hard_sigmoid(x)

硬 Sigmoid 激活函数。

硬 Sigmoid 激活函数定义为:

  • 0 如果 x <= -3
  • 1 如果 x >= 3
  • (x/6) + 0.5 如果 -3 < x < 3

它是 Sigmoid 激活函数的一种更快速、分段线性的近似。

参数

  • x:输入张量。

参考


[源代码]

hard_silu 函数

keras.activations.hard_silu(x)

硬 SiLU 激活函数,也称为硬 Swish。

它定义为:

  • 0 如果 x < -3
  • x 如果 x > 3
  • x * (x + 3) / 6 如果 -3 <= x <= 3

它是 SiLU 激活函数的一种更快速、分段线性的近似。

参数

  • x:输入张量。

参考


[源代码]

hard_tanh 函数

keras.activations.hard_tanh(x)

硬 Tanh 激活函数。

它定义为: hard_tanh(x) = -1 for x < -1, hard_tanh(x) = x for -1 <= x <= 1, hard_tanh(x) = 1 for x > 1

参数

  • x:输入张量。

[源代码]

leaky_relu 函数

keras.activations.leaky_relu(x, negative_slope=0.2)

Leaky ReLU 激活函数。

参数

  • x:输入张量。
  • negative_slope:一个 float 值,用于控制低于阈值的数值的斜率。

[源代码]

linear 函数

keras.activations.linear(x)

线性激活函数(直接通过)。

“线性”激活函数是恒等函数:它返回未修改的输入。

参数

  • x:输入张量。

[源代码]

log_sigmoid 函数

keras.activations.log_sigmoid(x)

Sigmoid 激活函数的对数。

它定义为 f(x) = log(1 / (1 + exp(-x)))

参数

  • x:输入张量。

[源代码]

log_softmax 函数

keras.activations.log_softmax(x, axis=-1)

Log-Softmax 激活函数。

每个输入向量独立处理。axis 参数设置函数沿着输入的哪个轴应用。

参数

  • x:输入张量。
  • axis:一个整数,Softmax 函数应用的轴。

[源代码]

mish 函数

keras.activations.mish(x)

Mish 激活函数。

它定义为:

mish(x) = x * tanh(softplus(x))

其中 softplus 定义为

softplus(x) = log(exp(x) + 1)

参数

  • x:输入张量。

参考


[源代码]

relu 函数

keras.activations.relu(x, negative_slope=0.0, max_value=None, threshold=0.0)

应用 ReLU(整流线性单元)激活函数。

在默认值下,此函数返回标准的 ReLU 激活:max(x, 0),即 0 和输入张量的逐元素最大值。

修改默认参数允许你使用非零阈值,更改激活函数的最大值,并为低于阈值的值使用输入值的非零倍数。

示例

>>> x = [-10, -5, 0.0, 5, 10]
>>> keras.activations.relu(x)
[ 0.,  0.,  0.,  5., 10.]
>>> keras.activations.relu(x, negative_slope=0.5)
[-5. , -2.5,  0. ,  5. , 10. ]
>>> keras.activations.relu(x, max_value=5.)
[0., 0., 0., 5., 5.]
>>> keras.activations.relu(x, threshold=5.)
[-0., -0.,  0.,  0., 10.]

参数

  • x:输入张量。
  • negative_slope:一个 float 值,用于控制低于阈值的数值的斜率。
  • max_value:一个 float 值,用于设置饱和阈值(函数将返回的最大值)。
  • threshold:一个 float 值,给出激活函数低于该值时将被抑制或设置为零的阈值。

返回

一个与输入 x 具有相同形状和数据类型的张量。


[源代码]

relu6 函数

keras.activations.relu6(x)

Relu6 激活函数。

它是 ReLU 函数,但被截断到最大值 6。

参数

  • x:输入张量。

[源代码]

selu 函数

keras.activations.selu(x)

缩放指数线性单元(SELU)。

缩放指数线性单元(SELU)激活函数定义为:

  • scale * x 如果 x > 0
  • scale * alpha * (exp(x) - 1) 如果 x < 0

其中 alphascale 是预定义的常数(alpha=1.67326324scale=1.05070098)。

基本上,SELU 激活函数将 scale (> 1) 与 keras.activations.elu 函数的输出相乘,以确保正输入的斜率大于 1。

alphascale 的值选择得使得输入在两个连续层之间保持均值和方差不变,只要权重初始化正确(参见 keras.initializers.LecunNormal 初始化器)并且输入单元的数量“足够大”(更多信息请参阅参考文献)。

参数

  • x:输入张量。

注意事项

参考


[源代码]

sigmoid 函数

keras.activations.sigmoid(x)

Sigmoid 激活函数。

它定义为:sigmoid(x) = 1 / (1 + exp(-x))

对于小值(<-5),sigmoid 返回接近于零的值,对于大值(>5),函数的结果接近于 1。

Sigmoid 等同于一个 2 元素的 softmax,其中第二个元素假定为零。Sigmoid 函数始终返回 0 到 1 之间的值。

参数

  • x:输入张量。

[源代码]

silu 函数

keras.activations.silu(x)

Swish(或 Silu)激活函数。

它定义为:swish(x) = x * sigmoid(x)

Swish(或 Silu)激活函数是一个平滑的、非单调的函数,它在上方无界,在下方有界。

参数

  • x:输入张量。

参考


[源代码]

softmax 函数

keras.activations.softmax(x, axis=-1)

Softmax 将一个值向量转换为概率分布。

输出向量的元素在 [0, 1] 范围内,并且总和为 1。

每个输入向量独立处理。axis 参数设置函数沿着输入的哪个轴应用。

Softmax 通常用作分类网络最后一层的激活函数,因为其结果可以解释为概率分布。

每个向量 x 的 softmax 计算为 exp(x) / sum(exp(x))

输入值是相应概率的对数几率。

参数

  • x:输入张量。
  • axis:一个整数,Softmax 函数应用的轴。

[源代码]

soft_shrink 函数

keras.activations.soft_shrink(x, threshold=0.5)

软收缩激活函数。

它定义为:

soft_shrink(x) = x - threshold 如果 x > threshold, soft_shrink(x) = x + threshold 如果 x < -threshold, soft_shrink(x) = 0 否则。

参数

  • x:输入张量。
  • threshold:阈值。默认为 0.5。

[源代码]

softplus 函数

keras.activations.softplus(x)

Softplus 激活函数。

它定义为:softplus(x) = log(exp(x) + 1)

参数

  • x:输入张量。

[源代码]

softsign 函数

keras.activations.softsign(x)

Softsign 激活函数。

Softsign 定义为:softsign(x) = x / (abs(x) + 1)

参数

  • x:输入张量。

[源代码]

sparse_plus 函数

keras.activations.sparse_plus(x)

SparsePlus 激活函数。

SparsePlus 定义为:

sparse_plus(x) = 0 for x <= -1. sparse_plus(x) = (1/4) * (x + 1)^2 for -1 < x < 1. sparse_plus(x) = x for x >= 1.

参数

  • x:输入张量。

[源代码]

sparsemax 函数

keras.activations.sparsemax(x, axis=-1)

Sparsemax 激活函数。

对于每个批次 i 和类别 j,sparsemax 激活函数定义为:

sparsemax(x)[i, j] = max(x[i, j] - τ(x[i, :]), 0)。

参数

  • x:输入张量。
  • axisint,sparsemax 操作应用的轴。

返回

一个张量,sparsemax 转换的输出。与 x 具有相同的类型和形状。

参考


[源代码]

squareplus 函数

keras.activations.squareplus(x, b=4)

Squareplus 激活函数。

Squareplus 激活函数定义为:

f(x) = (x + sqrt(x^2 + b)) / 2

其中 b 是一个平滑参数。

参数

  • x:输入张量。
  • b:平滑参数。默认为 4。

参考


[源代码]

tanh 函数

keras.activations.tanh(x)

双曲正切激活函数。

它定义为:tanh(x) = sinh(x) / cosh(x),即 tanh(x) = ((exp(x) - exp(-x)) / (exp(x) + exp(-x)))

参数

  • x:输入张量。

[源代码]

tanh_shrink 函数

keras.activations.tanh_shrink(x)

Tanh shrink 激活函数。

它定义为:

f(x) = x - tanh(x).

参数

  • x:输入张量。

[源代码]

threshold 函数

keras.activations.threshold(x, threshold, default_value)

阈值激活函数。

它定义为:

threshold(x) = x 如果 x > threshold, threshold(x) = default_value 否则。

参数

  • x:输入张量。
  • threshold:决定何时保留或替换 x 的值。
  • default_value:当 x <= threshold 时分配的值。


创建自定义激活函数

你也可以使用一个可调用对象作为激活函数(在这种情况下,它应该接受一个张量并返回具有相同形状和数据类型的张量)。

model.add(layers.Dense(64, activation=keras.ops.tanh))

关于“高级激活”层

比简单函数更复杂的激活函数(例如,可学习的、保持状态的激活函数)可以在 高级激活层 中找到。