torch激活函数
时间: 2025-05-31 17:47:45 浏览: 21
### PyTorch 激活函数的使用方法及示例
#### 一、激活函数的作用
激活函数在神经网络中起到至关重要的作用,它们通过引入非线性特性使模型能够拟合复杂的数据分布。如果没有这些非线性变换,无论堆叠多少层,整个网络仍然只是一个线性映射[^1]。
#### 二、常见激活函数及其特点
以下是几种常用的激活函数以及其适用场景:
1. **ReLU (Rectified Linear Unit)**
ReLU 是最广泛使用的激活函数之一,具有简单高效的特点。它的计算方式如下:
\[
f(x) = \max(0, x)
\]
它将负数部分置零,保留正数部分不变。这种设计使其非常适合处理稀疏数据集并加速训练过程[^4]。
2. **Sigmoid**
Sigmoid 将任意实数值压缩到 [0, 1] 范围内,常用于概率预测任务中表示输出的概率值。然而由于梯度消失问题,在深层网络中较少单独使用。
3. **Tanh (Hyperbolic Tangent)**
Tanh 类似于 sigmoid 的扩展版,可以将输入映射至 [-1, 1] 区间。相比 sigmoid 更加中心化,有助于改善收敛速度。
4. **HardSwish**
HardSwish 是一种改进型激活函数,尤其适用于移动设备上的轻量化模型(如 MobileNetV3)。它结合了 swish 和 relu 的优点,既保持良好的表达能力又降低了运算成本[^3]。
#### 三、具体实现代码示例
下面展示如何利用 `torch.nn` 或者 `torch.nn.functional` 来调用不同类型的激活函数:
```python
import torch
import torch.nn as nn
import torch.nn.functional as F
# 创建一个随机张量作为测试数据
input_tensor = torch.randn((2, 3))
print("原始输入:")
print(input_tensor)
# 方法一: 使用模块形式(nn.Module)
relu_module = nn.ReLU()
output_relu = relu_module(input_tensor)
print("\n经过 ReLU 处理后的结果:")
print(output_relu)
sigmoid_module = nn.Sigmoid()
output_sigmoid = sigmoid_module(input_tensor)
print("\n经过 Sigmoid 处理后的结果:")
print(output_sigmoid)
tanh_module = nn.Tanh()
output_tanh = tanh_module(input_tensor)
print("\n经过 Tanh 处理后的结果:")
print(output_tanh)
hardswish_module = nn.Hardswish()
output_hardswish = hardswish_module(input_tensor)
print("\n经过 HardSwish 处理后的结果:")
print(output_hardswish)
# 方法二: 使用功能形式(torch.nn.functional)
output_functional_relu = F.relu(input_tensor)
print("\n通过 functional API 实现 ReLU 后的结果:")
print(output_functional_relu)
```
以上程序片段展示了四种主要激活函数的实际操作流程,并对比了两种不同的接口风格——基于类(`nn`)与基于函数(`F`)的方式[^2][^3].
#### 四、注意事项
当选用某种特定激活函数时需考虑以下几个方面:
- 数据分布特征;
- 是否存在梯度爆炸/消失风险;
- 计算资源消耗情况等。
---
阅读全文
相关推荐

















