当前位置: 首页 > news >正文

torch.nn中的非线性激活介绍合集——Pytorch中的非线性激活

1、nn.ELU

基本语法:

class torch.nn.ELU(alpha=1.0, inplace=False)

按元素应用 Exponential Linear Unit (ELU) 函数。
论文中描述的方法:通过指数线性单元 (ELU) 进行快速准确的深度网络学习。
ELU 定义为:
E L U ( x ) = { x , i f   x > 0 α ∗ ( e x p ( x ) − 1 ) , i f x ≤ 0 ELU(x)=\{\begin{array}{c} x, & \mathrm{if~x > 0}\\ \alpha * (exp(x)-1), & \mathrm{if x \le 0} \end{array} ELU(x)={x,α(exp(x)1),if x>0ifx0

Parameters 参数:

  • alpha (float) – ELU 公式的 α α α值。默认值:1.0
  • Inplace(bool) – 可以选择就地执行作。默认值: False

Shape: 形状:

  • Input::(∗),其中 ∗表示任意数量的维度。
  • Output:(∗),与输入的形状相同。

在这里插入图片描述
Examples: 例子:

>>> m = nn.ELU()
>>> input = torch.randn(2)
>>> output = m(input)

2、ReLU

基本语法:

class torch.nn.ReLU(inplace=False)

按元素应用修正的线性单元函数。
R e L U ( x ) = ( x ) + = m a x ( 0 , x ) ReLU(x)=(x)^+=max(0,x) ReLU(x)=(x)+=max(0,x)

Parameters 参数:

  • Inplace (bool) – 可以选择就地执行作。默认值: False

参数说明:

  • inplace=False
import torch
from torch import nn

m = nn.ReLU(inplace=False)
input = torch.randn(2)
print(input)
output = m(input)
print(input)
print(output)

此时,输入Input并未改变,而是复制了一份原始输入并在该复制上进行非线性激活:

tensor([ 1.6213, -0.0794])
tensor([ 1.6213, -0.0794])
tensor([1.6213, 0.0000])
  • inplace=True
import torch
from torch import nn

m = nn.ReLU(inplace=True)
input = torch.randn(2)
print(input)
output = m(input)
print(input)
print(output)

此时,直接对原始输入数据进行非线性激活:

tensor([-0.3541, -0.6384])
tensor([0., 0.])
tensor([0., 0.])

Shape: 形状:

  • Input: (∗) ,其中 ∗ 表示任意数量的维度。
  • Output: (∗),与输入的形状相同。

在这里插入图片描述
Examples: 例子:

  >>> m = nn.ReLU()
  >>> input = torch.randn(2)
  >>> output = m(input)
  
An implementation of CReLU - https://arxiv.org/abs/1603.05201

  >>> m = nn.ReLU()
  >>> input = torch.randn(2).unsqueeze(0)
  >>> output = torch.cat((m(input), m(-input)))

3、Sigmoid

基本语法:

class torch.nn.Sigmoid(*args, **kwargs)

按元素应用 Sigmoid 函数。

S i g m o i d ( x ) = σ ( x ) = 1 1 + e x p ( − x ) Sigmoid(x)=\sigma(x)=\frac{1}{1+exp(-x)} Sigmoid(x)=σ(x)=1+exp(x)1

Shape: 形状:

  • Input: (∗),其中 ∗ 表示任意数量的维度。
  • Output: (∗),与输入的形状相同。

在这里插入图片描述
Examples: 例子:

>>> m = nn.Sigmoid()
>>> input = torch.randn(2)
>>> output = m(input)

4、Tanh

基本语法:

class torch.nn.Tanh(*args, **kwargs)

按元素应用 Hyperbolic Tangent (Tanh) 函数。
T a n h ( x ) = t a n h ( x ) = e x p ( x ) − e x p ( − x ) e x p ( x ) + e x p ( − x ) Tanh(x)=tanh(x)=\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)} Tanh(x)=tanh(x)=exp(x)+exp(x)exp(x)exp(x)

Shape: 形状:

  • Input: (∗),其中 ∗ 表示任意数量的维度。
  • Output: (∗),与输入的形状相同。

在这里插入图片描述
Examples: 例子:

>>> m = nn.Tanh()
>>> input = torch.randn(2)
>>> output = m(input)

5、LeakyReLU

基本语法:

class torch.nn.LeakyReLU(negative_slope=0.01, inplace=False)

按元素应用 LeakyReLU 函数。
L e a k y R e L U ( x ) = m a x ( 0 , x ) + n e g a t i v e s l o p e ∗ m i n ( 0 , x ) LeakyReLU(x)=max(0,x)+negative_slope*min(0,x) LeakyReLU(x)=max(0,x)+negativeslopemin(0,x)
or
L e a k y R e L U ( x ) = { x , i f   x ≥ 0 n e g a t i v e s l o p e × x , o t h e r w i s e LeakyReLU(x)=\{\begin{array}{c}x, & \mathrm{if~x\ge0}\\ negative_slope \times x, & \mathrm{otherwise}\end{array} LeakyReLU(x)={x,negativeslope×x,if x0otherwise

Parameters 参数

  • negative_slope(float)– 控制负斜率的角度 (用于负输入值)。默认值:1e-2
  • Inplace (bool)– 可以选择就地执行作。默认值: False

Shape: 形状:

  • 输入: (∗) 其中 * 表示任意数量的附加维度
  • 输出: (∗),与输入形状相同

在这里插入图片描述
Examples: 例子:

>>> m = nn.LeakyReLU(0.1)
>>> input = torch.randn(2)
>>> output = m(input)

5、Softplus

基本语法:

class torch.nn.Softplus(beta=1.0, threshold=20.0)

按元素应用 Softplus 函数。
S o f t p l u s ( x ) = 1 β ∗ log ⁡ ( 1 + e x p ( β ∗ x ) ) Softplus(x)=\frac{1}{\beta}*\log(1+exp(\beta*x)) Softplus(x)=β1log(1+exp(βx))

SoftPlus 是 ReLU 函数的平滑近似值,可用于将机器的输出限制为始终为正。
为了数值稳定性,当 时 i n p u t × β > t h r e s h o l d input×β>threshold input×β>threshold,实现恢复为线性函数。

Parameters 参数

  • beta(float) – Softplus 公式的值 β \beta β。默认值:1
  • threshold(float)– 高于此值的值将恢复为线性函数。默认值:20

参数说明:

  • threshold( β \beta β=1)
    i n p u t × β ≤ t h r e s h o l d input×β \le threshold input×βthreshold时:
import torch
from torch import nn

m = nn.Softplus()
input = torch.randn(2)
print(input)

output = m(input)
print(output)
tensor([-0.2053,  0.3776])
tensor([0.5958, 0.8997])

可以验证: S o f t p l u s ( − 0.2053 ) = 1 1 ∗ log ⁡ ( 1 + e x p ( 1 ∗ ( − 0.2053 ) ) ) = 0.595756... Softplus(-0.2053)=\frac{1}{1}*\log(1+exp(1*(-0.2053)))=0.595756... Softplus(0.2053)=11log(1+exp(10.2053)))=0.595756...
S o f t p l u s ( 0.3776 ) = 1 1 ∗ log ⁡ ( 1 + e x p ( 1 ∗ ( 0.3776 ) ) ) = 0.899665... Softplus(0.3776)=\frac{1}{1}*\log(1+exp(1*(0.3776)))=0.899665... Softplus(0.3776)=11log(1+exp(10.3776)))=0.899665...

i n p u t × β > t h r e s h o l d input×β > threshold input×β>threshold时:

import torch
from torch import nn

m = nn.Softplus()
input = torch.tensor([30.])
print(input)

output = m(input)
print(output)
tensor([30.])
tensor([30.])

此时恢复为线性函数

Shape: 形状:

  • Input: (∗) ,其中 ∗ 表示任意数量的维度。
  • Output: (∗) ,与输入的形状相同。

在这里插入图片描述

Examples: 例子:

>>> m = nn.Softplus()
>>> input = torch.randn(2)
>>> output = m(input)
http://www.dtcms.com/a/109626.html

相关文章:

  • Webacy 利用 Walrus 技术构建链上风险分析决策层
  • 软考又将迎来新的改革?
  • c#和c++脚本解释器科学运算
  • 约瑟夫环的四种(数组,链表,递归,迭代)解决方案,与空间、时间复杂度分析
  • 【Linux】远程登录时,使用图形界面报错:MoTTY X11 proxy: Unsupported authorisation protocol
  • Vue 学习随笔系列二十二 —— 表格高度自适应
  • 一个完整的 HTTP/HTTPS 请求流程
  • 【电路笔记】-触发器的转换
  • ctfshow VIP题目限免 源码泄露
  • 【面试篇】Es
  • QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异
  • 服务器磁盘io性能监控和优化
  • c++中cin.ignore()的作用
  • Unirest:优雅的Java HTTP客户端库
  • CUDA概览
  • Python星球日记 - 第1天:欢迎来到Python星球
  • 十款Steam单机游戏
  • 2025-04-03 Latex学习1——本地配置Latex + VScode环境
  • PandasAI:当数据分析遇上自然语言处理
  • uni-app项目上传至gitee方法详细教程
  • Java代理(六)当前主流动态代理框架性能对比
  • 安全、可靠,企业内部im即时通讯软件选择
  • 十一、buildroot系统登录配置
  • 从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第1章 简单的介绍一下ESP8266和他的编程指令
  • Oracle数据库数据编程SQL<6.2 数据字典表之间的关联关系>
  • C++的智能指针weak_ptr和普通指针的区别
  • 第五课:高清修复和放大算法
  • MySQL安装教程(详细版)
  • Linux应用编程(文件IO)
  • 移远RG200U-CN模组WAKEUP_IN引脚