nn.LeakyReLU(negative_slope=0.2, inplace=False)
1. 什么是 LeakyReLU?
LeakyReLU 是经典 ReLU 激活函数的改进版。
ReLU :对于输入
x,输出max(0, x),负数直接置为 0。LeakyReLU :对于输入
x,当x >= 0时输出x;当x < 0时输出negative_slope * x(一个很小的斜率),而不是直接变成 0。
2. 参数解释
negative_slope=0.2
控制负数部分的斜率。
这里
0.2表示当输入为负数时,输出 = 输入 × 0.2。例如:输入 -5 → 输出 -1;输入 -0.1 → 输出 -0.02。
通常设置为一个小的正数(如 0.01、0.2 等),目的是保留一点负数信息,避免神经元"死亡"。
inplace=False
表示是否在原地修改输入张量。
False(默认值):不修改原输入,而是返回一个新的输出张量。
True:会直接修改输入张量的值,节省内存,但可能会丢失原始数据(比如需要保留输入用于梯度计算时不能用)。大多数情况下保持
False更安全,除非你明确知道可以复用内存。
3. 使用示例
import torch
import torch.nn as nn
# 创建一个输入张量,需要梯度以观察反向传播
x = torch.tensor([[-1.0, 2.0, -3.0]], requires_grad=True)
x = x+2
print("原始 x:", x)
# 使用 inplace=False 的 LeakyReLU(默认)
leaky_relu_false = nn.LeakyReLU(negative_slope=0.2, inplace=False)
y = leaky_relu_false(x)
print("\ninplace=False 输出 y:", y)
print("x 本身未改变:", y is x)
# 使用 inplace=True 的 LeakyReLU
leaky_relu_true = nn.LeakyReLU(negative_slope=0.2, inplace=True)
z = leaky_relu_true(x) # 注意这里传入 x,但 x 会被原地修改
print("\n调用 inplace=True 后返回的 z:", z)
print("原地修改后的 x:", x) # x 的值已经被改变了
print("z 和 x 是否是同一个对象?", z is x) # 返回 True,说明 z 就是 x 本身

就是创建一个带泄漏的线性整流单元,负数部分以 0.2 的斜率衰减,且不修改原始输入。它常用于深度学习模型中,作为激活函数来引入非线性,同时缓解 ReLU 的"神经元坏死"问题。