PyTorch 深度学习笔记(十一):ReLU 激活函数的 PyTorch 调用与参数设置

1. ReLU 函数定义

修正线性单元(Rectified Linear Unit)是最常用的激活函数之一,数学定义为:
$$
f(x) = \max(0, x)
$$
其导数为分段函数:
$$
f'(x) = \begin{cases}
1 & \text{if } x > 0 \
0 & \text{if } x \leq 0
\end{cases}
$$
优势:计算高效、缓解梯度消失问题。


2. PyTorch 调用方式

通过 torch.nn 模块实现:

import torch.nn as nn

# 创建 ReLU 层
relu_layer = nn.ReLU()


3. 关键参数详解

唯一可配置参数:

  • inplace (布尔值,默认为 False)
    • False:保留原始输入,输出为新张量
    • True:直接在原输入上修改,节省内存
    # 内存优化模式
    relu_inplace = nn.ReLU(inplace=True)
    

⚠️ 注意:inplace=True 时,原始输入数据会被覆盖。在需要保留输入值的场景(如残差连接)中慎用。


4. 完整使用示例
import torch
import torch.nn as nn

# 创建输入张量 (含负值)
input = torch.tensor([-2.0, -0.5, 0.0, 1.0, 3.0])

# 初始化 ReLU 层
relu = nn.ReLU()

# 前向传播
output = relu(input)
print(output)  # 输出: tensor([0., 0., 0., 1., 3.])


5. 网络集成示例

在卷积神经网络中的典型应用:

class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3)
        self.relu = nn.ReLU(inplace=True)  # 内存优化
        self.pool = nn.MaxPool2d(2)

    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(x)  # 负值归零
        x = self.pool(x)
        return x


6. 数学特性补充
  • 稀疏激活:负输入输出为 $0$,仅部分神经元激活
  • 线性区域:正区间保持线性 $f(x)=x$,避免饱和现象
  • 死神经元问题:当输入恒为负时,梯度为 $0$,可通过 LeakyReLU 缓解

通过合理使用 inplace 参数,可在大型模型中显著降低显存占用。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐