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

相关推荐
To_OC20 小时前
搞懂 Token 和 Embedding 后,我终于明白大模型是怎么 "读" 文字的
人工智能·llm·agent
兵慌码乱20 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
冬奇Lab1 天前
每日一个开源项目(第139篇):Voicebox - 本地运行的开源 ElevenLabs 替代品
人工智能·开源·资讯
冬奇Lab1 天前
Skill 系列(03):Skill 设计范式——5 个模式让输出从混沌到可预测
人工智能·开源·agent
IT_陈寒1 天前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
大模型真好玩1 天前
什么是Loop Engineering?最通俗易懂的Loop Engineering核心概念
人工智能·agent·deepseek
叁两1 天前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程