欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 神经网络常见激活函数 11-ReLU6函数

神经网络常见激活函数 11-ReLU6函数

2025/2/23 15:10:35 来源:https://blog.csdn.net/hbkybkzw/article/details/145641466  浏览:    关键词:神经网络常见激活函数 11-ReLU6函数

ReLU6

函数+导函数

  • ReLU6函数
    R e L U 6 ( x ) = { 0 x < 0 x 0 ≤ x ≤ 6 6 x > 6 \rm ReLU6(x) = \left\{ \begin{array}{ll} 0 & \quad x < 0 \\ x & \quad 0 \le x \le 6 \\ 6 & \quad x > 6 \end{array} \right. ReLU6(x)= 0x6x<00x6x>6

  • ReLU6函数导数
    d d x R e L U 6 ( x ) = { 0 x < 0 1 0 < x < 6 0 x > 6 \frac{d}{dx} \rm ReLU6(x) = \left\{ \begin{array}{ll} 0 & \quad x < 0 \\ 1 & \quad 0 < x < 6 \\ 0 & \quad x > 6 \end{array} \right. dxdReLU6(x)= 010x<00<x<6x>6
    x = 0 x=0 x=0 x = 6 x=6 x=6处的导数定义可能根据具体实现有所不同,但通常在这些点的导数值可以设为0、1或按照具体应用场景的需求进行定义。ReLU6通过将输出限制在[0, 6]区间内,有助于防止激活值过大导致的梯度消失问题,并且在某些神经网络架构中(如移动网络),它能够帮助减少模型大小和计算复杂度。


函数和导函数图像

  • 画图

    import numpy as np
    from matplotlib import pyplot as plt# 定义 ReLU6 函数
    def relu6(x):return np.minimum(np.maximum(0, x), 6)# 定义 ReLU6 的导数
    def relu6_derivative(x):return np.where(x < 0, 0, np.where(x > 6, 0, 1))# 生成数据
    x = np.linspace(-2, 8, 1000)
    y = relu6(x)
    y1 = relu6_derivative(x)# 绘制图形
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label='ReLU6')
    plt.plot(x, y1, label='Derivative')
    plt.title('ReLU6 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()
    

    relu6


优缺点

  • ReLU6 函数针对RELU的改进

    1. 数值稳定性:ReLU6 的设计初衷是为了在低精度计算环境中提高模型的鲁棒性。通过将激活值限制在 0 到 6 之间,ReLU6 可以避免激活值过大导致的数值不稳定问题
    2. 适用于低精度计算:ReLU6的输出范围有限,使其在低精度计算环境中(如量化神经网络)表现良好,适合在移动设备和嵌入式系统中使用
    3. 保持ReLU的优点:ReLU6继承了ReLU的大部分优点,如加速梯度下降、稀疏激活和减少计算复杂度
  • 缺点:

    1. 可能的梯度饱和问题:当输入值大于6时,ReLU6的梯度为0,这可能导致梯度饱和,类似于ReLU的“死亡ReLU”问题。
    2. 输出范围受限:ReLU6的输出范围被限制在0到6之间,这可能会限制模型对某些数据模式的学习能力。
    3. 对输入值敏感:ReLU6对输入值的范围较为敏感,如果输入值远大于6,可能会导致梯度饱和。
    4. 可能的性能损失:在某些任务中,ReLU6的限制可能会导致模型性能不如ReLU或其他激活函数。

pytorch中的ReLU6函数

  • 代码

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

tensorflow 中的ReLU6函数

  • 代码

    python: 3.10.9

    tensorflow: 2.18.0

    import tensorflow as tf# 创建 RELU6 激活函数
    relu6 = tf.keras.activations.relu6# 生成随机输入
    # x = tf.random.normal([2])
    x = [-0.3638,  0.3948]# 应用 RELU6 激活函数
    relu6_x = relu6(x)print(f"x: \n{x}")
    print(f"relu6_x:\n{relu6_x}")"""输出"""
    x: 
    [-0.3638, 0.3948]
    relu6_x:
    [0.     0.3948]
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词