tensorflow学习笔记(2):**函数

官方解释:

http://www.tensorfly.cn/tfdoc/api_docs/python/nn.html

tf.nn.relu(features, name=None)

tensorflow学习笔记(2):**函数

ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态

优点: 收敛速度会比 sigmoid/tanh 快。

缺点: 训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有**的功能,导致梯度永远都是零。

tf.nn.relu6(features, name=None)

如果x<0,输出0,如果0<x<6,输出x,如果x>6,输出6

tf.nn.softplus(features, name=None)

softplus函数的数学表达式为tensorflow学习笔记(2):**函数,它们的函数表达式如下: 

tensorflow学习笔记(2):**函数

tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

 

以P的概率值抑制神经元,若抑制则神经元为0(发生概率P),

若不被抑制,则神经元输出值tensorflow学习笔记(2):**函数(发生概率1-P)

x:输入
keep_prob:保留比例。        取值 (0,1] 。每一个参数都将按这个比例随机变更
noise_shape:干扰形状。     此字段默认是None,表示第一个元素的操作都是独立,但是也不一定。比例:数据的形状是shape(x)=[k, l, m, n],而noise_shape=[k, 1, 1, n],则第1和4列是独立保留或删除,第2和3列是要么全部保留,要么全部删除。
seed:随机数种子,让结果可再现。
name:

tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层

Dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的**值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。示意图如下:

tensorflow学习笔记(2):**函数

tf.nn.bias_add(value, bias, name=None)

tensorflow学习笔记(2):**函数

tensorflow学习笔记(2):**函数

tf.sigmoid(x, name=None)

tensorflow学习笔记(2):**函数

tensorflow学习笔记(2):**函数

sigmoid函数优缺点:
优点: 
可以把输入映射到(0, 1)区间,可以用来表示概率(eg:logistic regression) 
在物理意义上最为接近生物神经元
缺点: 
梯度消失问题 
首先明确一点:误差反向传播时,梯度包含了f′(zl)和上一层的误差项(又包含了f′(zl+1):z 为权重加权和)两个乘法因子,反向传播推导
由于 sigmoid 的导数f′(zl)区间为(0, 0.25],所以其极易落入饱和区,导致梯度非常小,权重接近不变,无法正常更新
误差不断向底层传递的过程中,f′(zl)会呈指数倍增加,而其值域为(0, 0.25],所以梯度越往后传递值越小,最终导致权重无法正常更新
sigmoid的输出并不是均值为0的,所有输出数据的大于0,会增加梯度的不稳定性
当输出接近饱和或剧烈变化时,对输出范围的这种缩减往往会带来一些不利影响


tf.tanh(x, name=None)

tensorflow学习笔记(2):**函数

  • tanh函数的优缺点:
  • 优点: 
    Tanh outputs are zero-centered,把输入映射到(-1, 1)区间
  • 缺点: 
    虽然 tanh 的导数f′(zl)区间为(0, 1],但仍然会导致梯度消失问题!
  • 在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[0,1]之间时,函数值变化敏感

    ,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值。而tanh的输出和输入能够保持非线性单调上升和下降关

    系,符合BP网络的梯度求解,容错性好,有界,渐进于0、1,符合人脑神经饱和的规律,但比sigmoid函数延迟了饱和期。