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

相关推荐
阿里云大数据AI技术12 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
程序员爱德华12 小时前
Python与C++:异同点对比
c++·python
hangyuekejiGEO13 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术13 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
软萌萌的113 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
维基框架13 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab13 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI13 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab13 小时前
【无标题】
人工智能·开源
专业贴准14 小时前
苏州SMT供料器设备选型分析:本地主流自动化企业技术特点与行业趋势
人工智能·自动化·制造