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

神经网络常见激活函数 7-ELU函数

文章目录

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

ELU

  • 指数线性单元:ELU(Exponential Linear Unit)

函数+导函数

  • ELU函数
    E L U = { x x > = 0 α ( e x − 1 ) x < 0 \rm ELU = \left\{ \begin{array}{} x \quad &x>=0 \\ \alpha(e^x - 1) \quad &x<0 \end{array} \right. ELU={xα(ex1)x>=0x<0
    其中 是一个大于 0 的超参数,通常取值为 1。

  • ELU函数导数
    d d x E L U = { 1 x > = 0 α e x x < 0 \frac{d}{dx} \rm ELU = \left\{ \begin{array}{} 1 \quad &x >= 0 \\ \alpha e^x \quad &x < 0 \end{array} \right. dxdELU={1αexx>=0x<0


函数和导函数图像

  • 画图

    下面的 α \alpha α 取值为 1

    import numpy as np
    from matplotlib import pyplot as plt
    
    # 定义 ELU 函数
    def elu(x, alpha=1.0):
        return np.where(x > 0, x, alpha * (np.exp(x) - 1))
    
    # 定义 ELU 的导数
    def elu_derivative(x, alpha=1.0):
        return np.where(x > 0, 1, alpha * np.exp(x))
    
    # 生成数据
    x = np.linspace(-2, 2, 1000)
    alpha = 1  # 可以调整 alpha 的值
    y = elu(x, alpha)
    y1 = elu_derivative(x, alpha)
    
    # 绘制图形
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label='ELU')
    plt.plot(x, y1, label='Derivative')
    plt.title(f'ELU (α={alpha}) and Partial 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()
    

    ELU


优缺点

  • ELU 的优点

    1. 处理梯度消失问题:ELU通过在负输入时引入非零梯度,缓解了梯度消失问题。
    2. 引入负值:ELU允许负值,这使得模型能够学习更好的表示。
    3. 平滑过渡:ELU函数是平滑的,避免了ReLU在零点处的不连续性,这有助于优化和梯度流。
    4. 加速收敛:ELU通常能够更快地收敛,并在训练的早期阶段实现更好的准确率。
    5. 避免死神经元:与ReLU不同,ELU确保所有单元保持活跃,避免了“死神经元”问题。
    6. 推动零均值激活:ELU的负值有助于将激活值推向零均值,从而改善学习动态。
  • ELU 的缺点

    1. ELU也是为了解决 Dead RELU 而剔除的改进型。计算上稍微比Leaky ReLU复杂一点,但是从精度上看似乎并未提高多少。
    2. 尽管理论上比ReLU更好,但目前在实践中没有充分的证据表明ELU总是比ReLU好。

pytorch中的ELU函数

  • 代码

    import torch
    
    # 定义 ELU 函数
    f = torch.nn.ELU(alpha=1)  # PyTorch 提供的 ELU 激活函数模块
    x = torch.randn(2)  # 生成一个随机张量作为输入
    
    elu_x = f(x)        # 应用 ELU 函数
    
    print(f"x: \n{x}")
    print(f"elu_x:\n{elu_x}")
    
    """输出"""
    x: 
    tensor([ 0.3435, -2.3949])
    elu_x:
    tensor([ 0.3435, -0.9088])
    

tensorflow 中的ELU函数

  • 代码

    python: 3.10.9

    tensorflow: 2.18.0

    import tensorflow as tf
    
    # 创建 ELU 激活函数层
    elu = tf.keras.layers.ELU(alpha=1.0)
    
    # 生成随机输入
    x = tf.random.normal([2])
    
    # 应用 ELU 激活函数
    elu_x = elu(x)
    
    print(f"x: \n{x}")
    print(f"elu_x:\n{elu_x}")
    
    """输出"""
    x: 
    [-1.4998378 -0.2037226]
    elu_x:
    [-0.77683365 -0.18431139]
    


http://www.kler.cn/a/541450.html

相关文章:

  • 如何将3DMAX中的3D文件转换为AutoCAD中的2D图形?
  • 推荐一个免费的、开源的大数据工程学习教程
  • 解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用
  • C++基础系列【8】如何解决编译器报的错误
  • 探秘AES加密算法:多种Transformation全解析
  • 【kafka实战】06 kafkaTemplate java代码使用示例
  • SOME/IP报文格式及发现协议详解
  • JUnit 5 源码结构概览
  • 基于web前端对简书页眉的开发及登陆的跳转
  • 项目6:基于大数据校园一卡通数据分析和可视化
  • 每日一题——缺失的第一个正整数
  • Open-Interface:基于大语言模型 LLM 的自动化界面操作系统
  • 前端开发中,如何判断一个元素是否在可视区域中?
  • ZND网络分析仪,一款高性能的测试与测量设备
  • 10:超级玛丽游戏
  • 利用NestJS构建高效的RESTful API接口
  • 什么是推理大模型?DeepSeek R1推理大模型与DeepSeek V3模型的区别是什么?什么时候该使用推理大模型?
  • 【Linux】:Socket编程应用层 TCP
  • [学习笔记] Kotlin Compose-Multiplatform
  • 在离线的服务器上部署Python的安装库
  • 计算机网络结课设计:通过思科Cisco进行中小型校园网搭建
  • kbengine服务器和 数据库 系统路径配置
  • C语言基本概念————讨论sqrt()和pow()函数与整数的关系
  • 高效利用Java爬虫开发批量获取商品信息:电商数据挖掘的“利器”
  • 【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-GSYVideoPlayer
  • Pyqt的QTabWidget组件