zoukankan      html  css  js  c++  java
  • TensorFlow Activation Function 1

    部分转自:https://blog.csdn.net/caicaiatnbu/article/details/72745156

    激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。

    神经网络的数学基础是处处可微的,所以选取激活函数要保证数据输入与输出也是可微的。TensorFlow中提供哪些激活函数的API。

    激活函数不会改变数据的维度,也就是输入和输出的维度是相同的。TensorFlow中有如下激活函数:

    tf.nn.relu()
    tf.nn.sigmoid()
    tf.nn.tanh()
    tf.nn.elu()
    tf.nn.bias_add()
    tf.nn.crelu()
    tf.nn.relu6()
    tf.nn.softplus()
    tf.nn.softsign()
    tf.nn.dropout()#防止过拟合,用来舍弃某些神经元

    包括平滑的非线性的激活函数,如sigmoid、tanh、elu、softplus、softsign,也包括连续但不是处处可微的函数relu、relu6、crelu、relu_x,以及随机正则化函数dropout。

    上述激活函数的输入均为要计算的x(一个张量),输出均为x数据类型相同的张量。常见的激活函数有sigmoid、tanh、relu、softplus这4种。

    1. sigmoid 函数

    这是传统神经网络中最常用的激活函数之一,公式和函数图像如下:
    {displaystyle S(x)={frac {1}{1+e^{-x}}}.}



    优点:它输出映射在(0,1)内,单调连续,非常适合用作输出层,并且求导比较容易;
    缺点:具有软饱和性,一旦输入落入饱和区,一阶导数就变得接近于0,很容易产生梯度消失。
    饱和性:当|x|>c时,其中c为某常数,此时一阶导数等于0,通俗的说一阶导数就是上图中的斜率,函数越来越水平。

    2. tanh函数

    tanh也是传统神经网络中比较常用的激活函数,公式和函数图像如下:

    tanh函数也具有软饱和性。因为它的输出是以0为中心,收敛速度比sigmoid函数要快。但是仍然无法解决梯度消失问题。

    3. relu 函数

    relu函数是目前用的最多也是最受欢迎的激活函数。公式和函数图像如下:
    由上图的函数图像可以知道,relu在x<0时是硬饱和。由于当x>0时一阶导数为1。所以,relu函数在x>0时可以保持梯度不衰减,从而缓解梯度消失问题,还可以更快的去收敛。但是,随着训练的进行,部分输入会落到硬饱和区,导致对应的权重无法更新。我们称之为“神经元死亡”。
     
    除了relu本身外,TensorFlow还定义了relu6,也就是定义在min(max(features, 0), 6)的tf.nn.relu6(features, name=None),以及crelu,也就是tf.nn.crelu(features, name=None).
     
     

    4. softplus 函数

    softplus函数可以看作是relu函数的平滑版本,公式和函数图像如下:

    5. leakrelu 函数

    leakrelu函数是relu激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。公式和图像如下:
     
     
    左边缩小方差,右边保持方差;方差整体还是缩小的,而均值得不到保障。

    6. ELU 函数

    leakrelu函数是relu激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。公式和图像如下:
     
    左边缩小方差,右边保持方差;方差整体还是缩小的,而均值得不到保障。
     
     

    7. SELU 函数

    最近的自归一化网络中提出,函数和图像如下:
    蓝色是:selu,橙色是:elu
     
    左边缩小方差,右边放大方差,适当选取参数alpha和lambda,使得整体上保持方差与期望。如果选取:
    lambda=1.0506,alpha=1.67326,那么可以验证如果输入的x是服从标准正态分布,那么SELU(x)的期望为0,方差为1.
     

    8. tf.nn.softmax 函数:n分类

    关于softmax的详细说明,请看Softmax。 
    通过Softmax回归,将logistic的预测二分类的概率的问题推广到了n分类的概率的问题。通过公式 
     
    可以看出当月分类的个数变为2时,Softmax回归又退化为logistic回归问题。

    下面的几行代码说明一下用法

    # -*- coding: utf-8 -*-
    import tensorflow as tf
    
    A = [1.0,2.0,3.0,4.0,5.0,6.0]
    
    with tf.Session() as sess:
            print sess.run(tf.nn.softmax(A))

    结果

    0.00426978  0.01160646  0.03154963  0.08576079  0.23312201  0.63369131]

     

     
    参考: 
    李嘉璇 著 TensorFlow技术解析与实战
    黄文坚 唐源 著 TensorFlow实战郑泽宇 
    顾思宇 著 TensorFlow实战Google深度学习框架
    乐毅 王斌 著 深度学习-Caffe之经典模型详解与实战
    TensorFlow中文社区 http://www.tensorfly.cn/
    极客学院 著 TensorFlow官方文档中文版
    TensorFlow官方文档英文版
  • 相关阅读:
    蚂蚁金服合作的RISE实验室到底有多牛?
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    2016年全球IC设计大厂营收排名:高通稳居龙头
    C++模板遇到iterator时候遇到的问题和解决方法
    C++模板遇到iterator时候遇到的问题和解决方法
    C++模板遇到iterator时候遇到的问题和解决方法
    $("div span")选取里的所有的元素
    ParseError: Unrecognised input. Possibly missing something
  • 原文地址:https://www.cnblogs.com/xianhan/p/9146593.html
Copyright © 2011-2022 走看看