【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)  # 输出:标准化到单位向量
相关推荐
索迪迈科技几秒前
机器学习投票分类
人工智能·机器学习·分类
君名余曰正则4 分钟前
机器学习08——集成学习(Boosting、Bagging、结合策略)
人工智能·机器学习·集成学习
小鑫同学10 分钟前
M4 MacBook Pro + Qwen 模型:企业问答机器人原型微调实战方案
人工智能·llm
搬砖的小码农_Sky20 分钟前
机器人商业化落地需要突破的关键性技术
人工智能·ai·机器人
luoganttcc21 分钟前
PyTorch 中nn.Embedding
pytorch·深度学习·embedding
xwz小王子22 分钟前
Science Robotics 封面论文:RoboBallet利用图神经网络和强化学习规划多机器人协作
人工智能·神经网络·机器人
Deepoch26 分钟前
当按摩机器人“活了”:Deepoc具身智能如何重新定义人机交互体验
人工智能·科技·机器人·人机交互·具身智能
37手游后端团队27 分钟前
Cursor实战:用Cursor实现积分商城系统
人工智能·后端
九章云极AladdinEdu31 分钟前
绿色算力技术栈:AI集群功耗建模与动态调频系统
人工智能·pytorch·深度学习·unity·游戏引擎·transformer·gpu算力
嘀咕博客43 分钟前
拍我AI:PixVerse国内版,爱诗科技推出的AI视频生成平台
人工智能·科技·音视频·ai工具