提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
pytorch之常用激活函数
- 一、sigmoid函数
- 二、ReLU函数
- 三、ReLU6函数
- 四、 ELU函数
- 五、SELU函数
一、sigmoid函数
1.sigemoid简介
sigmoid容易饱和,当输入非常大或者非常小的时候,函数曲线非常平坦,梯度就接近于0。而反向传播中,我们需要使用sigmoid的导数来更新权重,如果导数都基本为0,会导致权重基本没什么更新,这种现象也可以叫做梯度弥散。
将所有数据映射成了(0,1)之间的数,很好的表达神经元的激活与未激活的状态适合二分类。
class torch.nn.Sigmoid
Shape:
-输入:’ (N, *) ‘,其中’ * ‘表示任意数量的额外维度
-输出:’ (N, *) ',形状与输入相同
二、ReLU函数
relu函数是目前主流的激活函数,它的公式很简单,输入小于0的时候为0,大于0的时候是本身。
class torch.nn.ReLU6(inplace=False)
参数: inplace-选择是否进行覆盖运算,默认值为False
shape:
输入:,代表任意数目附加维度
输出:,与输入拥有同样的shape属性
三、ReLU6函数
函数表达式:
特点:ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。
class torch.nn.ReLU6(inplace=False)
参数: inplace-选择是否进行覆盖运算
shape:
输入:,代表任意数目附加维度
输出:,与输入拥有同样的shape属性**
四、 ELU函数
ELU函数就是针对RELU函数的一个改进型,相比于RELU函数,再输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除relu死掉的问题,不过还是有梯度饱和和指数运算的问题。
class torch.nn.ELU(alpha=1.0, inplace=False)
参数: inplace-选择是否进行覆盖运算
alpha-默认值为1.0
shape:
输入:,代表任意数目附加维度
输出:,与输入拥有同样的shape属性
五、SELU函数
当其中参数取为
时,在网络权重服从标准正态分布的条件下,各层输出的分布会向标准正态分布靠拢。这种「自我标准化」的特性可以避免梯度消失和爆炸的问题,让结构简单的前馈神经网络获得甚至超越state-of-the-art 的性能。
class torch.nn.SELU(inplace=False)
参数: inplace-选择是否进行覆盖运算
输入:,代表任意数目附加维度
输出:,与输入拥有同样的shape属性