PyTorch 中定义了一个 LeakyReLU 激活函数层

复制代码
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 的"神经元坏死"问题。

相关推荐
深小乐3 小时前
我在 Anthropic ELI5 上加了5样东西,做成了更好用的 ELI5+
人工智能
东风破_4 小时前
《LangGraph Memory:为什么 Agent 需要 Checkpointer?》
人工智能
锋行天下4 小时前
LangGraph 同级节点之间修改数据先后问题
人工智能
2601_962078194 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
u1301304 小时前
AI 日报(2026年9月12日)
人工智能
东风破_4 小时前
《LangGraph Human-in-the-loop:Interrupt 如何让 Agent 等待人工确认》
人工智能
2601_962218614 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949654 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
智塑未来4 小时前
中文短剧出海翻译工具横评:VMEG AI、鬼手、Vozo AI、ElevenLabs怎么选?
人工智能
东风破_4 小时前
《LangGraph 条件路由与循环:如何让 Agent 自己决定下一步?》
人工智能