当前位置: 首页 > news >正文

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

文章目录

    • CELU
      • 函数+导函数
      • 函数和导函数图像
      • 优缺点
      • pytorch中的CELU函数
      • tensorflow 中的CELU函数

CELU

  • 连续可微指数线性单元:CELU(Continuously Differentiable Exponential Linear Unit),是一种连续可导的激活函数,结合了 ELUReLU 的特点,旨在解决 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)={xx0α(eαx1)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. dxdCELU(x)={1x0eαxx<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 的优点

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

    1. 计算复杂度高:CELU的指数运算比ReLU更复杂,计算成本更高。
    2. 参数敏感:CELU的性能对α参数的选择较为敏感,不同的α值可能会显著影响模型的性能。
    3. 可能的过拟合风险:在某些情况下,CELU可能会导致模型过拟合,尤其是在数据集较小或模型复杂度较高时。
    4. 训练时间增加:由于计算复杂度的增加,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]
    

http://www.lryc.cn/news/537858.html

相关文章:

  • 软考高级《系统架构设计师》知识点(四)
  • opencv交叉编译
  • 安装vite报错Install for [ ‘create-vite@latest‘ ] failed with code 1
  • Spring框架中都用到了哪些设计模式?
  • LabVIEW 中 dotnet.llb 库功能
  • C# 变量,字段和属性的区别
  • wordpress模板文件结构超详解
  • android studio下载安装汉化-Flutter安装
  • 数据开放共享和平台整合优化取得实质性突破的智慧物流开源了
  • 如何设置 Nginx 连接超时并进行测试(Nginx优化)
  • springboot整合mybatis-plus(保姆教学) 及搭建项目
  • 知识管理成功:关键指标和策略,研究信息的投资回报率
  • 【算法】链表
  • 集成测试总结文档
  • 关于Dest1ny:我的创作纪念日
  • Python爬虫-猫眼电影的影院数据
  • 【计算机网络】传输层数据段格式
  • nsc account 及user管理
  • 晶闸管主要参数分析与损耗计算
  • .net6 mvc 获取网站(服务器端)的IP地址和端口号
  • 坐井说天阔---DeepSeek-R1
  • 数据结构与算法——快速排序
  • Node.js技术原理分析系列——Node.js调试能力分析
  • 在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
  • 蓝桥杯试题:计数问题
  • 数学建模与MATLAB实现:数据拟合全解析
  • C语言——排序(冒泡,选择,插入)
  • git如何下载指定版本
  • 数字电路-基础逻辑门实验
  • 新数据结构(9)——Java异常体系