提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


pytorch之常用激活函数

  • 一、sigmoid函数
  • 二、ReLU函数
  • 三、ReLU6函数
  • 四、 ELU函数
  • 五、SELU函数



一、sigmoid函数

1.sigemoid简介

sigmoid容易饱和,当输入非常大或者非常小的时候,函数曲线非常平坦,梯度就接近于0。而反向传播中,我们需要使用sigmoid的导数来更新权重,如果导数都基本为0,会导致权重基本没什么更新,这种现象也可以叫做梯度弥散

将所有数据映射成了(0,1)之间的数,很好的表达神经元的激活与未激活的状态适合二分类。

pytorch高斯编码 pytorch sigmoid函数_权重


class torch.nn.Sigmoid

Shape:

-输入:’ (N, *) ‘,其中’ * ‘表示任意数量的额外维度

-输出:’ (N, *) ',形状与输入相同


二、ReLU函数

relu函数是目前主流的激活函数,它的公式很简单,输入小于0的时候为0,大于0的时候是本身。

pytorch高斯编码 pytorch sigmoid函数_深度学习_02


class torch.nn.ReLU6(inplace=False)

参数: inplace-选择是否进行覆盖运算,默认值为False

shape:

输入:pytorch高斯编码 pytorch sigmoid函数_权重_03,代表任意数目附加维度
输出:pytorch高斯编码 pytorch sigmoid函数_python_04,与输入拥有同样的shape属性


三、ReLU6函数

函数表达式:

pytorch高斯编码 pytorch sigmoid函数_python_05

特点:ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。

class torch.nn.ReLU6(inplace=False)
参数: inplace-选择是否进行覆盖运算

shape:

输入:pytorch高斯编码 pytorch sigmoid函数_权重_03,代表任意数目附加维度
输出:pytorch高斯编码 pytorch sigmoid函数_python_04,与输入拥有同样的shape属性**


四、 ELU函数

ELU函数就是针对RELU函数的一个改进型,相比于RELU函数,再输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除relu死掉的问题,不过还是有梯度饱和和指数运算的问题。

pytorch高斯编码 pytorch sigmoid函数_神经网络_08


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

参数: inplace-选择是否进行覆盖运算

alpha-默认值为1.0

shape:

输入:pytorch高斯编码 pytorch sigmoid函数_权重_03,代表任意数目附加维度
输出:pytorch高斯编码 pytorch sigmoid函数_python_04,与输入拥有同样的shape属性


五、SELU函数

pytorch高斯编码 pytorch sigmoid函数_pytorch高斯编码_11


当其中参数取为

pytorch高斯编码 pytorch sigmoid函数_深度学习_12

时,在网络权重服从标准正态分布的条件下,各层输出的分布会向标准正态分布靠拢。这种「自我标准化」的特性可以避免梯度消失和爆炸的问题,让结构简单的前馈神经网络获得甚至超越state-of-the-art 的性能。

class torch.nn.SELU(inplace=False)
参数: inplace-选择是否进行覆盖运算
输入:pytorch高斯编码 pytorch sigmoid函数_权重_03,代表任意数目附加维度
输出:pytorch高斯编码 pytorch sigmoid函数_python_04,与输入拥有同样的shape属性