nn.LeakyReLU 是PyTorch中的Leaky Rectified Linear Unit(ReLU)激活函数的实现。Leaky ReLU是一种修正线性单元,它在非负数部分保持线性,而在负数部分引入一个小的斜率(通常是一个小的正数),以防止梯度消失问题。这种激活函数的数学表达式如下:

leaky ReLUs_激活函数


negative_slope:x为负数时的需要的一个系数,控制负斜率的角度。默认值:1e-2(0.01)

leaky ReLUs_激活函数_02


本文主要包括以下内容:

  • 1.nn.LeakyReLU的函数构成
  • 2.nn.LeakyReLU的常见用法
  • 3.LeakyReLU函数图像实现


1.nn.LeakyReLU的函数构成

nn.LeakyReLU 是PyTorch中的Leaky Rectified Linear Unit(ReLU)激活函数的实现,它是torch.nn.Module的子类。下面是 nn.LeakyReLU 类的主要构成部分和参数:

class nn.LeakyReLU(negative_slope=0.01, inplace=False)

构造函数参数:

  • negative_slope(默认为0.01):这是Leaky ReLU激活函数的负斜率,即在输入值为负数时的斜率。它是一个浮点数,通常设置为一个小的正数,以控制在负数区域的线性部分的斜率。较小的值会导致更线性的行为,较大的值会导致更接近传统ReLU的行为。
  • inplace(默认为False):如果设置为True,则会在原地修改输入张量,否则将创建一个新的张量作为输出。原地操作可以节省内存,但可能会改变输入张量的值。

nn.LeakyReLU 在前向传播时将输入张量中的负值部分乘以 negative_slope,从而实现Leaky ReLU激活函数的效果。它通常用于深度神经网络中,以缓解梯度消失问题,并引入非线性变换。

在PyTorch中,我们可以使用nn.LeakyReLU类来创建Leaky ReLU激活函数,并可以通过参数来设置斜率。

2.nn.LeakyReLU的常见用法

以下是使用nn.LeakyReLU的一些常见用法:

  1. 创建Leaky ReLU激活函数层:
import torch.nn as nn

# 创建一个Leaky ReLU激活函数层,斜率为0.2(可以根据需要进行调整)
leaky_relu = nn.LeakyReLU(0.2)
  1. 对张量应用Leaky ReLU激活函数:
import torch

# 创建一个示例输入张量
input_tensor = torch.tensor([-1.0, 2.0, -3.0, 4.0, -5.0])

# 应用Leaky ReLU激活函数
output_tensor = leaky_relu(input_tensor)

在上面的示例中,output_tensor将包含应用Leaky ReLU激活函数后的结果,其中负数部分被乘以了斜率0.2。

使用Leaky ReLU激活函数的一个主要优势是它可以缓解梯度消失问题,特别是在深度神经网络中。我们可以根据实际问题和实验结果来调整斜率的值,以获得最佳性能。

下面是使用示例:

import torch
import torch.nn as nn

# 创建LeakyReLU激活函数层,默认的negative_slope是0.01
leaky_relu = nn.LeakyReLU()

# 示例输入张量
input_tensor = torch.tensor([-1.0, 2.0, -3.0, 4.0, -5.0])

# 应用Leaky ReLU激活函数
output_tensor = leaky_relu(input_tensor)

print(output_tensor)
#输出结果
#tensor([-0.0100,  2.0000, -0.0300,  4.0000, -0.0500])

这将输出一个张量,其中负数部分被乘以了默认的 negative_slope 值0.01。

3.LeakyReLU函数图像实现

Leaky ReLU(Leaky Rectified Linear Unit)激活函数在非负数部分保持线性,而在负数部分引入一个小的斜率(负斜率)。这个斜率通常是一个小的正数,例如0.01。下面是Leaky ReLU函数的图像示例,其中斜率设置为0.01:

import numpy as np
import matplotlib.pyplot as plt

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

# 生成输入值范围
x = np.linspace(-5, 5, 100)

# 计算Leaky ReLU的输出
y = leaky_relu(x, negative_slope=0.01)

# 绘制Leaky ReLU函数的图像
plt.plot(x, y, label='Leaky ReLU (0.01)', color='b')
plt.xlabel('Input')
plt.ylabel('Output')
plt.title('Leaky ReLU Activation Function')
plt.axhline(0, color='black', linewidth=0.5, linestyle='--')
plt.axvline(0, color='black', linewidth=0.5, linestyle='--')
plt.legend()
plt.grid(True)
plt.show()

运行此段代码,即可得到LeakyReLU函数图像

leaky ReLUs_斜率_03

上述代码生成了Leaky ReLU激活函数的图像,其中斜率设置为0.01。在图像中,我们可以看到,在负数区域,函数引入了一个小的负斜率,而在非负数区域,函数保持线性,值等于输入值。这是Leaky ReLU激活函数的基本特点,它允许一些负数值通过,并且对于大部分正数值保持线性。

我们可以通过更改negative_slope参数的值来调整Leaky ReLU函数的斜率,以满足不同需求。不同的斜率值会产生不同的非线性行为。