【Pytorch】torch.nn.functional模块中的非线性激活函数

在使用torch.nn.functional模块时,需要导入包:

python 复制代码
from torch.nn import functional

以下是常见激活函数的介绍以及对应的代码示例:

tanh (双曲正切)

输出范围:(-1, 1)

特点:中心对称,适合处理归一化后的数据。

公式:

python 复制代码
import torch
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
y = torch.nn.funcationl.tanh(x)
print(y)  # 输出:tensor([-0.9640, -0.7616,  0.0000,  0.7616,  0.9640])

sigmoid (S形函数)

输出范围:(0, 1)

特点:用于将输入映射到概率值,但可能会导致梯度消失问题。

公式:

python 复制代码
y = torch.nn.funcational.sigmoid(x)
print(y)  # 输出:tensor([0.1192, 0.2689, 0.5000, 0.7311, 0.8808])

SiLU (Sigmoid Linear Unit,也称Swish)

输出范围:(0, x)

特点:结合了线性和非线性特性,效果较好。

公式:silu(x) = x * sigmoid(x)

python 复制代码
y = torch.nn.funcationl.silu(x)
print(y)  # 输出:tensor([-0.2384, -0.2689,  0.0000,  0.7311,  1.7616])

GELU (Gaussian Error Linear Unit)

输出范围:接近ReLU,但更加平滑。

特点:常用于Transformer模型。

公式:近似为:gelu(x) ≈ x * sigmoid(1.702 * x)

python 复制代码
y = torch.nn.functional.gelu(x)
print(y)  # 输出:tensor([-0.0454, -0.1588,  0.0000,  0.8413,  1.9546])

ReLU (Rectified Linear Unit)

输出范围:[0, +∞)

特点:简单高效,是最常用的激活函数之一。

公式:relu(x) = max(0, x)

python 复制代码
y = torch.nn.funcationl.relu(x)
print(y)  # 输出:tensor([0., 0., 0., 1., 2.])

ReLU_ (In-place ReLU)

输出范围:[0, +∞)

特点:修改原张量而不是生成新的张量,节省内存。

python 复制代码
x.relu_()  # 注意:会改变x本身
print(x)  # x的值被修改为:tensor([0., 0., 0., 1., 2.])

Leaky ReLU

输出范围:(-∞, +∞)

特点:允许负值有较小的输出,避免死神经元问题。

公式:leaky_relu(x) = x if x > 0 else alpha * x

python 复制代码
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
y = torch.nn.functional.leaky_relu(x, negative_slope=0.01)
print(y)  # 输出:tensor([-0.0200, -0.0100,  0.0000,  1.0000,  2.0000])

Leaky ReLU_ (In-place Leaky ReLU)

特点:和ReLU_一样会修改原张量。

python 复制代码
x.leaky_relu_(negative_slope=0.01)
print(x)  # x的值被修改

Softmax

输出范围:(0, 1),且所有输出的和为1。

特点:常用于多分类任务的最后一层。

公式:

python 复制代码
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.nn.functional.softmax(x, dim=0)
print(y)  # 输出:tensor([0.0900, 0.2447, 0.6652])

Threshold

输出范围:手动设置的范围。

特点:小于阈值的数被置为设定值,大于等于阈值的数保持不变。

python 复制代码
x = torch.tensor([-1.0, 0.0, 1.0, 2.0])
y = torch.nn.functional.threshold(x, threshold=0.5, value=0.0)
print(y)  # 输出:tensor([0., 0., 0., 2.])

Normalize

功能:将张量的值标准化到指定范围。

公式:normalize(x) = x / max(||x||, eps)

python 复制代码
x = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
y = torch.nn.functional.normalize(x, p=2, dim=1)
print(y)  # 输出:标准化到单位向量
相关推荐
菩提祖师_11 分钟前
基于大模型实现论文观点查重
java·深度学习
搬砖的小码农_Sky28 分钟前
如何利用AI大模型提高软件开发效率?
人工智能
weixin_4870584130 分钟前
faiss 提供了多种索引类型
人工智能·机器学习·faiss
SEVEN-YEARS1 小时前
BERT模型中的嵌入后处理与注意力掩码
人工智能·bert·easyui
newxtc1 小时前
【天壤智能-注册安全分析报告-无验证纯IP限制存在误拦截隐患】
人工智能·tcp/ip·安全·网易易盾·ai写作·极验
爱技术的小伙子1 小时前
【ChatGPT】让ChatGPT生成批判性思维问题的回答
人工智能·chatgpt
代码不行的搬运工2 小时前
神经网络11-TFT模型的简单示例
人工智能·深度学习·神经网络
Rolei_zl2 小时前
AIGC(生成式AI)试用 18 -- AI Prompt
人工智能·prompt
小众AI2 小时前
Vanna - 与你的 SQL 数据库聊天
数据库·人工智能·sql
hope_wisdom2 小时前
实战OpenCV之人脸识别
人工智能·opencv·计算机视觉·人脸识别·facedetectoryn