PyTorch 深度学习笔记(十一):ReLU 激活函数的 PyTorch 调用与参数设置
·
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 参数,可在大型模型中显著降低显存占用。
更多推荐
所有评论(0)