TensorFlow常用激活函数及其特点和用法(6种)详解
http://c.biancheng.net/view/1911.html
每个神经元都必须有激活函数。它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性。该函数取所有输入的加权和,进而生成一个输出信号。你可以把它看作输入和输出之间的转换。使用适当的激活函数,可以将输出值限定在一个定义的范围内。
如果 xi 是第 j 个输入,Wj 是连接第 j 个输入到神经元的权重,b 是神经元的偏置,神经元的输出(在生物学术语中,神经元的激活)由激活函数决定,并且在数学上表示如下:

这里,g 表示激活函数。激活函数的参数 ΣWjxj+b 被称为神经元的活动。
这里对给定输入刺激的反应是由神经元的激活函数决定的。有时回答是二元的(是或不是)。例如,当有人开玩笑的时候...要么不笑。在其他时候,反应似乎是线性的,例如,由于疼痛而哭泣。有时,答复似乎是在一个范围内。
模仿类似的行为,人造神经元使用许多不同的激活函数。在这里,你将学习如何定义和使用 TensorFlow 中的一些常用激活函数。
下面认识几种常见的激活函数:
- 阈值激活函数:这是最简单的激活函数。在这里,如果神经元的激活值大于零,那么神经元就会被激活;否则,它还是处于抑制状态。下面绘制阈值激活函数的图,随着神经元的激活值的改变在 TensorFlow 中实现阈值激活函数:
上述代码的输出如下图所示:
- Sigmoid 激活函数:在这种情况下,神经元的输出由函数 g(x)=1/(1+exp(-x)) 确定。在 TensorFlow 中,方法是 tf.sigmoid,它提供了 Sigmoid 激活函数。这个函数的范围在 0 到 1 之间:
在形状上,它看起来像字母 S,因此名字叫 Sigmoid:
- 双曲正切激活函数:在数学上,它表示为 (1-exp(-2x)/(1+exp(-2x)))。在形状上,它类似于 Sigmoid 函数,但是它的中心位置是 0,其范围是从 -1 到 1。TensorFlow 有一个内置函数 tf.tanh,用来实现双曲正切激活函数:
以下是上述代码的输出:
- 线性激活函数:在这种情况下,神经元的输出与神经元的输入值相同。这个函数的任何一边都不受限制:
- 整流线性单元(ReLU)激活函数也被内置在 TensorFlow 库中。这个激活函数类似于线性激活函数,但有一个大的改变:对于负的输入值,神经元不会激活(输出为零),对于正的输入值,神经元的输出与输入值相同:
以下是 ReLU 激活函数的输出:
- Softmax 激活函数是一个归一化的指数函数。一个神经元的输出不仅取决于其自身的输入值,还取决于该层中存在的所有其他神经元的输入的总和。这样做的一个优点是使得神经元的输出小,因此梯度不会过大。数学表达式为 yi =exp(xi)/Σjexp(xj):
以下是上述代码的输出:
下面我们逐个对上述函数进行解释:
- 阈值激活函数用于 McCulloch Pitts 神经元和原始的感知机。这是不可微的,在 x=0 时是不连续的。因此,使用这个激活函数来进行基于梯度下降或其变体的训练是不可能的。
- Sigmoid 激活函数一度很受欢迎,从曲线来看,它像一个连续版的阈值激活函数。它受到梯度消失问题的困扰,即函数的梯度在两个边缘附近变为零。这使得训练和优化变得困难。
- 双曲正切激活函数在形状上也是 S 形并具有非线性特性。该函数以 0 为中心,与 Sigmoid 函数相比具有更陡峭的导数。与 Sigmoid 函数一样,它也受到梯度消失问题的影响。
- 线性激活函数是线性的。该函数是双边都趋于无穷的 [-inf,inf]。它的线性是主要问题。线性函数之和是线性函数,线性函数的线性函数也是线性函数。因此,使用这个函数,不能表示复杂数据集中存在的非线性。
- ReLU 激活函数是线性激活功能的整流版本,这种整流功能允许其用于多层时捕获非线性。
使用 ReLU 的主要优点之一是导致稀疏激活。在任何时刻,所有神经元的负的输入值都不会激活神经元。就计算量来说,这使得网络在计算方面更轻便。
ReLU 神经元存在死亡 ReLU 的问题,也就是说,那些没有激活的神经元的梯度为零,因此将无法进行任何训练,并停留在死亡状态。尽管存在这个问题,但 ReLU 仍是隐藏层最常用的激活函数之一。
- Softmax 激活函数被广泛用作输出层的激活函数,该函数的范围是 [0,1]。在多类分类问题中,它被用来表示一个类的概率。所有单位输出和总是 1。
总结
神经网络已被用于各种任务。这些任务可以大致分为两类:函数逼近(回归)和分类。根据手头的任务,一个激活函数可能比另一个更好。一般来说,隐藏层最好使用 ReLU 神经元。对于分类任务,Softmax 通常是更好的选择;对于回归问题,最好使用 Sigmoid 函数或双曲正切函数。
推荐阅读
- https://www.tensorflow.org/versions/r0.12/api_docs/python/nn/activation_functions提供了在 TensorFlow 中定义的激活函数的详细信息以及如何使用它们。
- https://en.wikipedia.org/wiki/Activation_function是对激活函数的一个很好的总结。
TensorFlow常用激活函数及其特点和用法(6种)详解的更多相关文章
- TensorFlow从0到1之TensorFlow常用激活函数(19)
每个神经元都必须有激活函数.它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个输出信号.你可以把它看作输入和输出之间的转换.使用适当的激活函数,可以将输出 ...
- GOF提出的23种设计模式是哪些 设计模式有创建形、行为形、结构形三种类别 常用的Javascript中常用设计模式的其中17种 详解设计模式六大原则
20151218mark 延伸扩展: -设计模式在很多语言PHP.JAVA.C#.C++.JS等都有各自的使用,但原理是相同的,比如JS常用的Javascript设计模式 -详解设计模式六大原则 设计 ...
- 【java】之常用四大线程池用法以及ThreadPoolExecutor详解
为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率2.线程并发数量过多,抢占系统资源从而导致阻塞3.对线程进行一些简单的管理 在Java中,线程池 ...
- Java常用四大线程池用法以及ThreadPoolExecutor详解
为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 在Java中,线 ...
- grep、egrep、fgrep的用法与特性详解
[转载自]http://tanxw.blog.51cto.com/4309543/1361993 开篇 学习Linux也有一段时间了,对Linux多少也算是有点了解了,越是了解也就越对这 ...
- Go template高级用法、深入详解、手册、指南、剖析
入门示例 以下为test.html文件的内容,里面使用了一个template语法{{.}}. <!DOCTYPE html> <html> <head> <m ...
- setsockopt()用法及参数详解
setsockopt()用法(参数详细说明) int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); ...
- shell常用命令之curl: -w,–write-out参数详解
顾名思义,write-out的作用就是输出点什么.curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出. 输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{varia ...
- C# Timer用法及实例详解
C# Timer用法有哪些呢?我们在使用C# Timer时都会有自己的一些总结,那么这里向你介绍3种方法,希望对你了解和学习C# Timer使用的方法有所帮助. 关于C# Timer类 在C#里关于 ...
随机推荐
- 运维开发实践——基于Sentry搭建错误日志监控系统
错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...
- ISO C语言新标准(C11)
新特性[2]有些和C++11是对应的,如线程和UTF-8: 对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及<std ...
- MongoDB学习笔记(六)
初识 MongoDB 中的索引 索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索引,NoSQL 中当然也有,本文我们就先来简单介绍下 MongoDB 中的索引. 索引创建 默 ...
- 直接操作DOM一定比虚拟DOM操作耗时,diff算法,key值,虚拟 DOM的定义
直接操作DOM一定比虚拟DOM操作耗时吗? 或者一次直接DOM操作一定比一次虚拟DOM操作耗时吗? 1)虚拟DOM的本质就是一个JS对象,虚拟DOM减少了真实DOM的操作,当修改数据的时候,就是修改虚 ...
- Linux 笔记 - 第二十三章 MySQL 主从复制配置
一.前言 MySQL Replication,也被称为主从复制.AB 复制.简单来说就是 A 和 B 两台服务器做主从后,在 A 服务器上写入数据,B 服务器上也会跟着写入输入,两者之间的数据是实时同 ...
- WPF布局原则
WPF系统使用基于流布局的布局标准,开发人员创建与显示分辨率和窗口大小无关的用户界面.在不同显示器上可以进行很好的缩放. 首先来谈一谈布局原则: WPF窗口只能包含一个元素(Window元素属于内容控 ...
- 在Nginx服务器上安装SSL证书
配置nginx 1.下载证书文件 2.在nginx的conf目录中创建目录cert目录,并将证书文件拷贝进去. 3.配置nginx.conf,完整的nginx.conf如下: #user nobody ...
- Linq实现字符串拼接多条件查询
Linq实现字符串拼接多条件查询 开发过程中,为提升用户体验,经常会使用到多条件查询,本篇博客介绍如何使用Linq实现字符串拼接多条件查询 一般SQL字符串拼接 1 string sql = &quo ...
- Width Height -- (1)
Width和Height应该是我们学习CSS时,最先接触到的属性了,一宽一高. 我们知道页面当中的标签分为块级元素和行内元素,它们最大的区别就在于,块级元素可以设置宽高,行内元素不能设置宽高. 举例说 ...
- JavaScript 总结[目录]
ECMAScript 基础 一.JavaScript 基础 1.1 JavaScript 简介 1.2 JavaScript 书写位置 二.JavaScript 数据类型 2.1 JavaScript ...