Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >神经网络中的激活函数-tanh

神经网络中的激活函数-tanh

作者头像
用户1332428
发布于 2018-07-30 07:32:23
发布于 2018-07-30 07:32:23
78900
代码可运行
举报
文章被收录于专栏:人工智能LeadAI人工智能LeadAI
运行总次数:0
代码可运行

正文共817个字,3张图,预计阅读时间8分钟。

为什么要引入激活函数

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。

正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。激活函数的作用是为了增加神经网络模型的非线性。否则你想想,没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。所以你没有非线性结构的话,根本就算不上什么神经网络。

tanh的绘制

tanh是双曲函数中的一个,tanh()为双曲正切。在数学中,双曲正切“tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。

公式

其实tanh(x)=2*sigmoid(2*x)-1

特点

  • 函数:y=tanh x;
  • 定义域:R
  • 值域:(-1,1)。
  • y=tanh x是一个奇函数,其函数图像为过原点并且穿越Ⅰ、Ⅲ象限的严格单调递增曲线,其图像被限制在两水平渐近线y=1和y=-1之间。

图像

Python绘制tanh函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1import math
 2import matplotlib.pyplot as plt
 3import numpy as np
 4import matplotlib as mpl
 5
 6
 7def tanh(x):
 8return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
 9
10fig = plt.figure(figsize=(6, 4))
11ax = fig.add_subplot(111)
12
13x = np.linspace(-10, 10)
14y = tanh(x)
15
16
17ax.spines['top'].set_color('none')
18ax.spines['right'].set_color('none')
19
20ax.xaxis.set_ticks_position('bottom')
21ax.spines['bottom'].set_position(('data', 0))
22ax.set_xticks([-10, -5, 0, 5, 10])
23ax.yaxis.set_ticks_position('left')
24ax.spines['left'].set_position(('data', 0))
25ax.set_yticks([-1, -0.5, 0.5, 1])
26
27plt.plot(x, y, label="Sigmoid", color="red")
28plt.legend()
29plt.show()

结果

相关资料

1、python绘制神经网络中的Sigmoid和Tanh激活函数图像(附代码) - CSDN博客;

2、神经网络中的激活函数具体是什么?为什么ReLu要好过于tanh和sigmoid function?搜狐科技搜狐网;

3、Sigmoid和tanh的异同 - CSDN博客;

4、sigmod函数tanh函数ReLU函数 - CSDN博客;

5、tanh_百度百科;

原文链接:https://www.jianshu.com/p/7409c8f1cdca

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能LeadAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#对象比较,你用对了吗?几种方法?
在 .NET 中使用 C# 时,对象比较(判等)可以通过多种方式进行,主要包括引用相等性比较和值相等性比较。理解这些不同的比较方法对于编写准确和高效的代码至关重要。值类型变量判断就是比较值是否相等,而引用类型的对象判断是否相等,一般是判断指定的对象是否是相同的实例。
郑子铭
2023/12/26
3620
C#对象比较,你用对了吗?几种方法?
CA1036:重写可比较类型中的方法
类型实现 System.IComparable 接口,并且不重写 System.Object.Equals,也不重载表示相等、不等、小于或大于的语言特定运算符。 如果类型仅继承接口的实现,则规则不会报告冲突。
呆呆
2022/01/10
6660
CA1815:重写值类型上的 Equals 和相等运算符
值类型未重写 System.Object.Equals 或未实现相等运算符 (==)。 此规则不检查枚举。
呆呆
2022/02/19
6080
C#类型基础
本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制。复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的。由此又引出了 引用类型和 值类型,以及相关的对象判等、装箱、拆箱等基础知识。
张子阳
2018/09/30
9080
C#类型基础
CA1046:不要对引用类型重载相等运算符
对于引用类型,相等运算符的默认实现几乎始终是正确的。 默认情况下,仅当两个引用指向同一对象时,它们才相等。
呆呆
2022/01/10
3120
C# 之 System.Object
System.Object C#中全部的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。假设我们没有明白指定继承类,编译器缺省觉得该类继承自System.Object类。System.Object类也可用小写的objectkeyword表示,两者全然等同。 由于全部的类都继承与System.Object,所以这些类都能够訪问该类中受保护的成员和公共的成员。以下我们就一起来看看可使用的成员有哪些。
全栈程序员站长
2022/07/12
4790
C# 之 System.Object
CA1820:使用字符串长度测试是否有空字符串
使用 String.Length 属性或 String.IsNullOrEmpty 方法比较字符串比使用 Equals 更快。 这是因为 Equals 执行的 MSIL 指令比 IsNullOrEmpty 或执行以用于检索 Length 属性值并将其与零进行比较的指令数要多得多。
呆呆
2022/02/19
3260
CA1021:避免使用 out 参数
按引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。 另外,out 和 ref 参数之间的区别并未得到广泛了解。
用户4268038
2022/01/10
5330
C#相等性 - 三个方法和一个接口
之所以结果是False,是因为object.Equals()评估的是引用的相等性,除非进行了重写。
solenovex
2019/05/25
5490
.NET面试题系列[4] - C# 基础知识(2)
面试出现频率:主要考察装箱和拆箱。对于有笔试题的场合也可能会考一些基本的类型转换是否合法。
s055523
2018/09/14
9300
.NET面试题系列[4] - C# 基础知识(2)
.NET面试题解析(02)-拆箱与装箱
装箱和拆箱几乎是所有面试题中必考之一,看上去简单,就往往容易被忽视。其实它一点都不简单的,一个简单的问题也可以从多个层次来解读。
莫问今朝
2018/08/31
5430
.NET面试题解析(02)-拆箱与装箱
CA1031:不要捕捉一般异常类型
在 catch 语句中捕捉到了 System.Exception 或 System.SystemException 等一般异常,或者已使用一般 catch 子句(如 catch())。
用户4268038
2022/01/10
4910
CA1045:不要通过引用来传递类型
公共类型中的公共或受保护方法有一个 ref 参数,该参数采用基元类型、引用类型或不属于内置类型的值类型。
呆呆
2022/01/10
4920
CA1061:不要隐藏基类方法
派生类型声明的方法与其基方法之一具有相同的名称和相同数量的参数;一个或多个参数是基方法中相应参数的基类型;所有剩余参数的类型都与基方法中相应参数的类型相同。
呆呆
2022/01/10
2460
CA1050:在命名空间中声明类型
应在命名空间内声明类型以避免名称冲突,并作为一种在对象层次结构中组织相关类型的方式。 任何命名的命名称空间之外的类型均位于无法在代码中引用的全局命名空间中。
呆呆
2022/01/10
4840
自己写一个DropDownList控件
预备知识: 1.关于object.Equals(objA,objB)方法 namespace ObjectEqua方法探究 { class Program { static void Main(string[] args) { int i = 1; int j = 1; object objA = i; object objB = j; C
静心物语313
2020/03/24
9000
自己写一个DropDownList控件
面向对象(四)-值类型与引用类型详解
类型被分为两种:值类型(整数,bool struct char 小数)和引用类型(string 数组 自定义的类,内置的类)。
孙寅
2020/06/02
1K0
装箱与值类型虽然很容易理解,但是在实际使用中,并不总是能100%用对
public struct Point { private int m_x, m_y; public Point(int x, int y) { m_x = x; m_y = y; } public override string ToString() { return string.Format("{0},{1}",
菩提树下的杨过
2018/01/22
8600
.NET面试题解析(03)-string与字符串操作
4.以下代码执行后内存中会存在多少个字符串?分别是什么?输出结果是什么?为什么呢?
莫问今朝
2018/08/31
5620
.NET面试题解析(03)-string与字符串操作
C# 学习笔记(4)—— C# 中的面向对象编程
封装指的是把类内部的数据隐藏起来,不让对象实例直接对其操作。C# 中提供了属性机制来对类内部的状态进行操作。此外,封装可以通过 public、private、protected 和 internal 等关键字来体现
Karl Du
2023/10/20
2570
相关推荐
C#对象比较,你用对了吗?几种方法?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验