PyTorch学习笔记之激活函数篇(四)

4、 Leaky ReLU 函数

4.1 公式

Leaky ReLU函数的公式:

f ( x ) = { x , x > = 0 λ x , x < 0 , λ ∈ ( 0 , 1 ) f(x) =\begin{cases} x&,x>=0 \\ \lambda x&,x<0,\lambda \in(0,1) \end{cases} f(x)={xλx,x>=0,x<0,λ(0,1)
Leakly ReLU函数的导函数:

f ′ ( x ) = { 1 , x > = 0 λ , x < 0 , λ ∈ ( 0 , 1 ) f'(x) = \begin{cases} 1&,x>=0 \\ \lambda &,x<0,\lambda \in(0,1) \end{cases} f(x)={1λ,x>=0,x<0,λ(0,1)

4.2 对应的图像

在这里插入图片描述

4.3 生成对应的图像代码

import numpy as np
import matplotlib.pyplot as plt

# 定义LeakyReLU函数
def leaky_relu(x, alpha=0.01):
    return np.where(x >= 0, x, alpha * x)

# 定义LeakyReLU的导数函数
def leaky_relu_derivative(x, alpha=0.01):
    return np.where(x >= 0, 1, alpha)

# 生成x值的范围
x = np.linspace(-10, 10, 100)

# 计算LeakyReLU函数值
y_leaky_relu = leaky_relu(x)

# 计算LeakyReLU导数值
y_leaky_relu_derivative = leaky_relu_derivative(x)

# 绘制LeakyReLU函数图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(x, y_leaky_relu, label='LeakyReLU')
plt.title('LeakyReLU Function')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

# 绘制LeakyReLU导数图像
plt.subplot(1, 2, 2)
plt.plot(x, y_leaky_relu_derivative, label='LeakyReLU Derivative')
plt.title('LeakyReLU Derivative')
plt.xlabel('x')
plt.ylabel('dy/dx')
plt.legend()

# 显示图像
plt.tight_layout()
plt.show()

4.4 优点与不足

Leaky ReLU函数(ReLU的改进):
1、与ReLU函数相比,把x的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度问题;有助于扩大 ReLU 函数的范围,通常𝜆λ的值为 0.01 左右;函数范围是负无穷到正无穷。
2、LeakyRelu激活函数通过在负半轴添加一个小的正斜率(使得负轴的信息不会全部丢失)来解决ReLU激活函数的“死区”问题,该斜率参数𝜆λ是手动设置的超参数,一般设置为0.01。通过这种方式,LeakyRelu激活函数可以确保模型训练过程中神经元的权重在输入小于0的情况下依然会得到更新。
3、不会出

4.5 Leaky ReLU 函数

在PyTorch中,torch.leaky_relu 函数是用于实现 Leaky ReLU 激活函数的。Leaky ReLU 是一种改进的 ReLU(Rectified Linear Unit)函数,它允许小的非零梯度当输入值为负时。这有助于解决ReLU在负值区域的神经元“死亡”问题。

torch.leaky_relu 的基本使用如下:

import torch

# 创建一个张量
x = torch.tensor([-5.0, -3.0, 0.0, 2.0, 5.0])

# 应用 Leaky ReLU 函数
y = torch.leaky_relu(x, negative_slope=0.01)

print(y)

这里,negative_slope 参数控制负值区域的斜率。默认值是 0.01,这意味着当输入值小于零时,输出将是输入值乘以 0.01。对于非负输入值,Leaky ReLU 的行为类似于普通的 ReLU 函数,即输出就是输入值本身。

如果你想要在一个神经网络模型中使用 Leaky ReLU,你可以在定义模型时将其作为激活函数使用,例如:

import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.fc1 = nn.Linear(10, 50)
        self.leaky_relu = nn.LeakyReLU(negative_slope=0.01)
        self.fc2 = nn.Linear(50, 1)

    def forward(self, x):
        x = self.fc1(x)
        x = self.leaky_relu(x)
        x = self.fc2(x)
        return x

model = MyModel()

在这个例子中,nn.LeakyReLU 被用作 MyModel 模型中的一个层,它将应用于全连接层 self.fc1 的输出。在模型的前向传播过程中,数据会首先通过全连接层,然后经过 Leaky ReLU 激活函数,最后再通过另一个全连接层。

相关推荐

  1. PyTorch学习笔记激活函数(五)

    2024-03-18 22:42:01       46 阅读
  2. PyTorch学习笔记激活函数(六)

    2024-03-18 22:42:01       37 阅读
  3. PyTorch学习笔记基础函数(十

    2024-03-18 22:42:01       41 阅读
  4. PyTorch学习笔记基础函数(八)

    2024-03-18 22:42:01       31 阅读
  5. PyTorch学习笔记基础函数(十一)

    2024-03-18 22:42:01       44 阅读
  6. PyTorch学习笔记基础函数(十二)

    2024-03-18 22:42:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 22:42:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 22:42:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 22:42:01       82 阅读
  4. Python语言-面向对象

    2024-03-18 22:42:01       91 阅读

热门阅读

  1. web蓝桥杯真题:时间管理大师

    2024-03-18 22:42:01       41 阅读
  2. 基于SpringBoot+Druid实现多数据源:baomidou多数据源

    2024-03-18 22:42:01       44 阅读
  3. centos系统ssh7.4升级9.6

    2024-03-18 22:42:01       34 阅读
  4. 【C++】map与set容器的应用总结

    2024-03-18 22:42:01       41 阅读
  5. ceph删除坏的磁盘

    2024-03-18 22:42:01       45 阅读
  6. spring学习源码第一课

    2024-03-18 22:42:01       31 阅读