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

embedded/2024/11/19 21:20:33/

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

from torch.nn import functional

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

tanh (双曲正切)

输出范围:(-1, 1)

特点:中心对称,适合处理归一化后的数据。
公式:tanh(x) = (e^x - e^{-x}) / (e^x + e^{-x})

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)
特点:用于将输入映射到概率值,但可能会导致梯度消失问题。
公式:sigmoid(x) = 1 / (1 + e^{-x})

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)

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)

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)

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

ReLU_ (In-place ReLU)

输出范围:[0, +∞)
特点:修改原张量而不是生成新的张量,节省内存。

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

Leaky ReLU

输出范围:(-∞, +∞)
特点:允许负值有较小的输出,避免死神经元问题。
公式:leaky_relu(x) = x if x > 0 else alpha * x

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_一样会修改原张量。

x.leaky_relu_(negative_slope=0.01)
print(x)  # x的值被修改

Softmax

输出范围:(0, 1),且所有输出的和为1。
特点:常用于多分类任务的最后一层。
公式:softmax(x)_i = exp(x_i) / sum(exp(x_j))

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

输出范围:手动设置的范围。
特点:小于阈值的数被置为设定值,大于等于阈值的数保持不变。

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)

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)  # 输出:标准化到单位向量

http://www.ppmy.cn/embedded/138869.html

相关文章

【大数据】Flink + Kafka 实现通用流式数据处理详解

目录 一、前言 二、流式数据处理场景介绍 2.1 流式数据处理概述 2.1.1 流式数据处理场景介绍 2.2 流式数据处理技术栈 2.2.1 数据采集 2.2.2 数据处理 2.2.3 数据存储 2.2.4 数据展示 2.3 流式数据处理场景面临的问题和挑战 三、通用的流式数据处理场景解决方案 3.1…

review-消息中间件MQ

RabbitMQ RabbitMQ,作为当今流行的开源消息代理软件,以其卓越的可靠性、灵活性和易用性在微服务架构和分布式系统中扮演着至关重要的角色。它不仅能够确保消息在不同系统组件间的高效传递,还能通过其高级消息队列协议(AMQP&#x…

Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了接口级的服务引入订阅的refreshInterfaceInvoker方法,当时还有最为关键的notify服务通知更新的部分源码没有学习,本次我们来学习notify通知本地服务更新的源码。 Dubb…

使用OpenFeign实现HTTP调用的最简单案例

首先编写服务提供者代码,也就是创建一个springboot项目,端口默认8080即可,然后新建一个接口,启动项目之后可以通过http://localhost:8080/api/data直接访问 RestController RequestMapping("/api") public class DataC…

容器安装gitlab

说明: 1、容器快速搭建gitlab,并将数据、配置文件、日志挂载到物理机磁盘 2、禁用不必要的gitlab插件,只部署必须的gitlab插件,减少cpu、内存等资源 3、gitlab页面禁用注册按钮,同时注意gitlab备份和恢复必须要相同版本 4、请备份gitlab两个重要配置文件:gitlab.rb、gitl…

【Python】Tkinter模块(巨详细)

专栏文章索引:Python 有问题可私聊:QQ:3375119339 本文内容系本人根据阅读的《Python GUI设计tkinter从入门到实践》所得,以自己的方式进行总结和表达。未经授权,禁止在任何平台上以任何形式复制或发布原始书籍的内容。…

【css+JavaScript 】关于链接选中且通过 js 设置持久的选中状态

1、点击后选中状态保持:当你点击任意链接时,它的颜色变为红色,并且页面刷新后仍然保留选中状态。 2、页面刷新后保持选中:即使刷新页面,选中的链接也能通过 localStorage 恢复,确保用户的选中状态持续存在…

怎样选择合适的服务器租用呢?

在数字化时代当中,企业选择合适的服务器租用是至关重要的,服务器是承载着网站和数据存储的主要核心,服务器的稳定性会影响到网站的访问速度和用户的体验感,本文就从几个方面来探讨怎样选择合适的服务器租用吧! 首先企业…