当前位置: 首页 > news >正文

各种激活函数的计算公式、图像以及实现代码

         激活函数已经成为神经网络中非常重要的一部分,随着各种类型的神经网络模型被人们开发出来,各种激活函数也应运而生,在不同的场景中,取得良好的效果。本文跟据著名的YOLO系列目标检测模型的源码 AlexeyAB Darknet,整理出目前神经网络模型中应用最广泛的20种激活函数,对它们的计算公式、图像特点进行介绍,并使用python代码实现这些激活函数的计算。

1、stair激活函数

        如图1所示,stair激活函数的图像就像阶梯一样。它的计算公式如下:

stair(x)=\left\{\begin{matrix} \left \lfloor x/2 \right \rfloor& (mod(\left \lfloor x \right \rfloor,2)=0)\\ (x+\left \lfloor x \right \rfloor)+\left \lfloor x/2 \right \rfloor&(mod(\left \lfloor x \right \rfloor,2)\neq 0) \end{matrix}\right.

式子中,\left \lfloor x \right \rfloor表示不大于x的整数,mod\left ( \left \lfloor x \right \rfloor,2 \right )表示对2取余数。 

图1 stair激活函数

 代码实现如下:


def stair(x):n=math.floor(x)if n%2==0:return math.floor(x/2.0)else:return (x-n)+math.floor(x/2.0)

2、hardtan激活函数

        如图2所示,hardtan激活函数是通过以直代曲近似实现tan函数,其计算公式如下:

hardtan(x)=\left\{\begin{matrix} -1.0 &(x<-1.0) \\ 1.0 &(x>1.0) \\ x & (other)\end{matrix}\right.

图2 hardtan激活函数

代码实现如下:

def hardtan(x):if x<-1.0:return -1.0elif x>1.0:return 1.0else:return x

3、linear激活函数

        linear激活函数是线性激活函数,输入x输出也是x,其函数图像如图3所示。

图3 线性激活函数

 代码实现:

def linear(x):return x

4、logistic激活函数

        logistic激活函数又叫sigmoid激活函数,如图4所示,logistic函数可以结果映射到0到1之间。其计算公式如下:

logistic(x)=\frac{1.0}{1.0+e^{-x}}

图4 logistic激活函数

 代码实现如下:

def logistic(x):return 1.0/(1.0+math.exp(-x))

5、loggy激活函数

        如图5所示,loggy的函数图像跟logistic有点相似,也是把输出映射到0到1之间。其计算公式如下:

loggy(x)=\frac{2.0}{1+e^{-x}}-1

图5 loggy激活函数

 代码实现:

def loggy(x):return 2.0/(1.0+math.exp(-x))-1.0

6、relu激活函数

        relu激活函数为线性整流函数,目的是把小于0的数截取掉,其函数图像如图6所示,其计算公式如下:

relu(x)=\left\{\begin{matrix} 0 & (x<0)\\ x & (x\geqslant 0) \end{matrix}\right.

图6 relu激活函数

 代码实现如下:

def relu(x):return x*(x>0)

7、relu6激活函数

        relu6和relu一样,也是线性整流函数,不同的是他对大于6的数进行了截断,其函数图像如图7所示,其计算公式如下:

relu6(x)=\left\{\begin{matrix} 0.0 & (x<0)\\ 6.0& (x>6)\\ x& (0\leq x\leq 6) \end{matrix}\right.

图7 relu6激活函数

 代码实现如下:

def relu6(x):if x<0:return 0.0elif x>6:return 6.0else:return x

8、elu激活函数

        elu激活函数的图像如图8所示,其计算公式如下:

elu(x)=\left\{\begin{matrix} x & (x\geq 0)\\ e^{x}& (x<0) \end{matrix}\right.

图8 elu激活函数

 代码实现:

def elu(x):return (x>=0)*x+(x<0)*(math.exp(x)-1.0)

9、selu激活函数

        selu激活函数如图9所示,其计算公式如下:

selu(x)=\left\{\begin{matrix} 1.0507*x& (x\geq 0)\\ 1.0507* 1.6732* (e^{x}-1.0)& (x<0) \end{matrix}\right.

图9 selu激活函数

 代码实现:                                                                                                                                        

def selu(x):return (x>=0)*1.0507*x+(x<0)*1.0507*1.6732*(math.exp(x)-1.0)

10、relie激活函数

                相比于relu激活函数,relie激活函数对于小于零的数据并不会直接截取为0,二是乘以一个小的系数,这个系数为0.01。其函数图像如图10所示,其计算公式如下:

relie(x)=\left\{\begin{matrix} 0.01*x & (x<0)\\ x& (x\geq 0) \end{matrix}\right.

图10 relie激活函数

 代码实现:

def relie(x):if x>0:return xelse:return 0.01*x

11、ramp激活函数

        如图11所示为ramp激活函数,其计算公式如下:

ramp(x)=\left\{\begin{matrix} x+0.1* x & (x>0)\\ 0.1*x& (x\leq 0) \end{matrix}\right.

图11 ramp激活函数

代码实现:

def ramp(x):return x*(x>0)+0.1*x

12、leaky激活函数

        如图12所示为leaky激活函数的图像,它与relie函数有点像,它的斜率系数要比relie激活函数要大,其计算公式如下:

leaky(x)=\left\{\begin{matrix} x & (x\geq 0)\\ 0.1* x& (x<0) \end{matrix}\right.

图12 leaky激活函数

 代码实现如下:

def leaky(x):if x<0:return 0.1*xelse:return x

13、tanh激活函数

        tanh激活函数的图像如图13所示,它的取值范围是[-1,1],其计算公式如下:

tanh(x)=\frac{2.0}{1.0+e^{-2* x}}-1

图13 tanh激活函数

 代码实现:

def tanh(x):return 2.0/(1.0+math.exp(-2.0*x))-1.0

14、gelu激活函数

        gelu激活函数的图像如图14所示,其计算公式如下:

gelu(x)=0.5* x(1.0+tanh(0.797885*x+0.035677*x^{3.0}))

式中,tanh为上文提到过的激活函数。

图14 gelu激活函数

代码实现如下:

def gelu(x):return 0.5*x*(1.0+math.tanh(0.797885*x+0.035677*math.pow(x,3.0)))

15、softplus激活函数

        softplus激活函数的图像如图15所示,其计算公式如下:

softplus(x,threshold)=\left\{\begin{matrix} x& (x>threshold)\\ e^{x}& (x<-threshold) \end{matrix}\right.

图15 softplus激活函数

 代码实现:

def softplus(x,threshold):if x>threshold:return xelif x<-threshold:return math.exp(x)else:return math.log(math.exp(x)+1.0)

 16、plse激活函数

        图16位plse激活函数的图像,其计算公式如下:

plse(x)=\left\{\begin{matrix} 0.01*(x+4.0) &(x<-4) \\ 0.01*(x-4.0)+1.0&(x>4) \\ 0.125*x+0.5& (-4\leq x\leq 4) \end{matrix}\right.

图16 plse激活函数

 代码实现:

def plse(x):if x<-4:return 0.01*(x+4.0)elif x>4:return 0.01*(x-4.0)+1.0else:return 0.125*x+0.5

17、lhtan激活函数

        图17是lhtan激活函数的图像,其计算公式为:

lhtan(x)=\left\{\begin{matrix} 0.001*x & (x<0)\\ 0.001*(x-1.0)+1.0&(x>1) \\ x& (0\leq x\leq 1) \end{matrix}\right.

图17 lhtan激活函数

 

代码实现:

def lhtan(x):if x<0:return 0.001*xelif x>1:return 0.001*(x-1.0)+1.0else:return x

18、swish激活函数

        图18是swish激活函数的图像,其计算公式如下:

swish(x)=x*logistic(x)

式中,logistic为上文所提到的激活函数,也叫sigmoid激活函数。

图18 swish激活函数

 代码实现:

def logistic(x):return 1.0/(1.0+math.exp(-x))def swish(x):return x*logistic(x)

19、mish激活函数

        mish激活函数的图像如图19所示,其计算公式如下:

mish(x)=x*tanh(softplus(x,20.0))

式中tanh,softplus均为上文描述过的激活函数。

图19 mish激活函数

 代码实现如下:

def softplus(x,threshold):if x>threshold:return xelif x<-threshold:return math.exp(x)else:return math.log(math.exp(x)+1.0)def tanh(x):return 2.0/(1.0+math.exp(-2.0*x))-1.0def mish(x):return x*tanh(softplus(x,20.0))

20、hardmish激活函数

        hardmish激活函数为mish激活函数的近似形式,它的图像如图20所示,其计算公式如下:

hardmish(x)=\left\{\begin{matrix} x & (x>0)\\ x*x*0.5+x&(-2< x\leq 0) \\ 0& (x\leq -2) \end{matrix}\right.

图20 hardmish激活函数

 代码实现:

def hardmish(x):if x>0:return xelif x>-2:return x*x*0.5+xelse:return 0

http://www.lryc.cn/news/34745.html

相关文章:

  • ArangoDB
  • MySQL8.0Linux安装及主从的搭建
  • 苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用
  • 银行数字化转型导师坚鹏:数字化转型为什么需要致良知与知行合一
  • Web前端学习:章三 -- JavaScript预热(二)
  • Excel绘制数据对比表格-表格可视化
  • 究竟是谁负了谁,来自底层测试的2022年终总结
  • C++——IO流
  • 网络 | UDP与TCP协议讲解 | TCP可靠性是怎样实现的?
  • JavaEE——简单介绍Thread类以及线程的基本操作
  • Java的数据库编程:JDBC
  • 蓝桥冲刺31天之第六天
  • Streamlit 工具记录
  • GreenPlum小结
  • C语言中数组和指针
  • Leetcode.剑指 Offer II 022 链表中环的入口节点
  • 4种不同编程语言的打印方式
  • websocket介绍
  • Educational Codeforces Round 144 (Rated for Div. 2),C,D
  • 【redis学习篇】Redis三种持久化方式详解
  • 垃圾回收中的分代年龄
  • 蓝桥杯-左移右移(2022国赛)
  • 你还在手撸SQL?ChatGPT笑晕在厕所
  • 【Redis】Redis慢查询
  • 【Kubernetes】第二十一篇 - k8s 项目部署流程和操作梳理
  • 推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术
  • 【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)
  • Pandas库:从入门到应用(一)
  • MySQL中concat()、concat_ws()、group_concat()函数使用
  • 【JavaEE初阶】第四节.文件操作 和 IO (上篇)