tensorflow学习笔记——常用的**函数
1.sigmoid
公式:
图像:
从图中可以看到,sigmoid**函数会将所有输入都转到0-1范围内。如此之外,它的倒数有一个常用到的性质:
即它的倒数可由自身表示。
- 优点:它输出映射在0-1内,单调连续,可以用来作分类,并且求导比较容易;
- 缺点:具有软饱和性,一旦输入过大或过小,一阶导数就变得接近于0,很容易产生梯度消失的现象。
tesorflow使用:tf.sigmoid(x)
2.tanh
公式:
注意:
称为双曲正弦函数
图像:
它将整个实数区间映射到了(-1,1),tanh函数也具有软饱和性。它的输出是以0为中心,tanh的收敛速度比sigmoid要快,由于存在软饱和性,所以tanh也存在梯度消失的问题。
tensorflow使用:tf.tanh(x)
3.ReLU
公式:
图像:
relu函数在x<0时,输出始终为0。由于x>0时,relu函数的导数为1,所以relu函数能够在x>0时保持梯度不断衰减,从而缓解梯度消失的问题,还能加快收敛速度,还能是神经网络具有稀疏性表达能力,因此它应该是目前使用最广泛的**函数(博主在论文里经常见到)。
不过由于当x<0时,relu函数的导数为0,导致对应的权重无法更新,可能导致部分神经元无法被**。
tensorflow使用:tf.nn.relu(x)
针对ReLU**函数可能导致部分神经元无法被**的情况,由很多改进版,比如Leaky ReLU,当x小于0时,也会有一个较小的斜率(比如0.2),但不为0。
tensorflow使用:tf.nn.leaky_relu(x,alpha=0.2)
4. softplus
softplus函数可以看作是relu函数的平滑版本
图像:
tensorflow使用:tf.nn.softplus(features, name = None)