主页 > 开源代码  > 

神经网络常见激活函数9-CELU函数

神经网络常见激活函数9-CELU函数

文章目录 CELU函数+导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数

CELU 连续可微指数线性单元:CELU(Continuously Differentiable Exponential Linear Unit),是一种连续可导的激活函数,结合了 ELU 和 ReLU 的特点,旨在解决 ELU 在某些情况下的梯度问题。 函数+导函数 CELU函数 C E L U ( x ) = { x x ≥ 0 α ( e x α − 1 ) x < 0 \rm CELU(x) = \left\{ \begin{array}{} x \quad x \ge 0 \\ \alpha(e^{\frac{x}{\alpha}} - 1) \quad x < 0 \end{array} \right. CELU(x)={xx≥0α(eαx​−1)x<0​

CELU函数导数 d d x C E L U ( x ) = { 1 x ≥ 0 e x α x < 0 \frac{d}{dx} \rm CELU(x) = \left\{ \begin{array}{} 1 \quad x \ge 0 \\ e^{\frac{x}{\alpha}} \quad x < 0 \end{array} \right. dxd​CELU(x)={1x≥0eαx​x<0​ 其中, α \alpha α 是一个非负参数,用于控制 x < 0 x<0 x<0时曲线的平滑度。当 α = 0 \alpha=0 α=0时,CELU函数退化为ReLU函数。对于 x < 0 x<0 x<0的部分,CELU使用指数函数来确保梯度不会消失,有助于加速训练过程中的梯度流动。


函数和导函数图像

画图

下面的是 α = 1 \alpha = 1 α=1

import numpy as np from matplotlib import pyplot as plt # 定义 CELU 函数 def celu(x, alpha=1.0): return np.where(x > 0, x, alpha * (np.exp(x / alpha) - 1)) # 定义 CELU 的导数 def celu_derivative(x, alpha=1.0): return np.where(x > 0, 1, np.exp(x / alpha)) # 生成数据 x = np.linspace(-3, 3, 1000) alpha = 1.0 # 可以调整 alpha 的值 y = celu(x, alpha) y1 = celu_derivative(x, alpha) # 绘制图形 plt.figure(figsize=(12, 8)) ax = plt.gca() plt.plot(x, y, label=f'CELU (α={alpha})') plt.plot(x, y1, label='Derivative') plt.title(f'CELU (α={alpha}) and Derivative') # 设置上边和右边无边框 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') # 设置 x 坐标刻度数字或名称的位置 ax.xaxis.set_ticks_position('bottom') # 设置边框位置 ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) plt.legend(loc=2) plt.show()


优缺点

CELU 的优点

连续可导:CELU函数在整个定义域上都是连续可导的,这使得它在优化过程中更加稳定。缓解梯度消失问题:CELU在负输入时引入非零梯度,有助于缓解梯度消失问题。平滑过渡:CELU函数在零点处是平滑的,避免了ReLU在零点处的不连续性。灵活性:CELU可以表示ReLU作为其特例,当α趋近于0时,CELU趋近于ReLU。加速收敛:在某些情况下,CELU能够比ReLU更快地收敛。

CELU 的缺点

计算复杂度高:CELU的指数运算比ReLU更复杂,计算成本更高。参数敏感:CELU的性能对α参数的选择较为敏感,不同的α值可能会显著影响模型的性能。可能的过拟合风险:在某些情况下,CELU可能会导致模型过拟合,尤其是在数据集较小或模型复杂度较高时。训练时间增加:由于计算复杂度的增加,CELU可能会导致训练时间变长。
pytorch中的CELU函数

代码

import torch # 定义 CELU 函数 f = torch.nn.CELU() # PyTorch 提供的 CELU 激活函数模块 x = torch.randn(2) # 生成一个随机张量作为输入 celu_x = f(x) # 应用 CELU 函数 print(f"x: \n{x}") print(f"celu_x:\n{celu_x}") """输出""" x: tensor([-0.8057, -0.8352]) celu_x: tensor([-0.5532, -0.5662])
tensorflow 中的CELU函数

代码

python: 3.10.9

tensorflow: 2.18.0

import tensorflow as tf # 创建 CELU 激活函数 celu = tf.keras.activations.celu # 生成随机输入 # x = tf.random.normal([2]) x = [-0.8057, -0.8352] # 应用 CELU 激活函数 celu_x = celu(x) print(f"x: \n{x}") print(f"celu_x:\n{celu_x}") """输出""" x: [-0.8057, -0.8352] celu_x: [-0.5532249 -0.5662123]
标签:

神经网络常见激活函数9-CELU函数由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“神经网络常见激活函数9-CELU函数